summaryrefslogtreecommitdiff
path: root/demo
diff options
context:
space:
mode:
Diffstat (limited to 'demo')
-rw-r--r--demo/Demo project.mcu8051ide441
-rw-r--r--demo/demo.wtc15
-rw-r--r--demo/demo0.adf9
-rw-r--r--demo/demo0.asm27
-rw-r--r--demo/demo0.bin1
-rw-r--r--demo/demo0.hex2
-rw-r--r--demo/demo0.lst198
-rw-r--r--demo/demo0.sim6
-rw-r--r--demo/demo1.adf19
-rw-r--r--demo/demo1.asm63
-rw-r--r--demo/demo1.binbin0 -> 15 bytes
-rw-r--r--demo/demo1.hex2
-rw-r--r--demo/demo1.lst262
-rw-r--r--demo/demo1.sim16
-rw-r--r--demo/demo2.adf50
-rw-r--r--demo/demo2.asm78
-rw-r--r--demo/demo2.binbin0 -> 42 bytes
-rw-r--r--demo/demo2.hex3
-rw-r--r--demo/demo2.lst270
-rw-r--r--demo/demo2.sim47
-rw-r--r--demo/demo3.adf9
-rw-r--r--demo/demo3.asm72
-rw-r--r--demo/demo3.bin1
-rw-r--r--demo/demo3.sim6
-rw-r--r--demo/demo4.adf45
-rw-r--r--demo/demo4.asm81
-rw-r--r--demo/demo4.binbin0 -> 66 bytes
-rw-r--r--demo/demo4.hex9
-rw-r--r--demo/demo4.lst228
-rw-r--r--demo/demo4.sim42
-rw-r--r--demo/demo5.adf5
-rw-r--r--demo/demo5.asm35
-rw-r--r--demo/demo5.bin1
-rw-r--r--demo/demo5.hex2
-rw-r--r--demo/demo5.lst216
-rw-r--r--demo/demo5.sim2
-rw-r--r--demo/demo_c_0bin0 -> 1425 bytes
-rw-r--r--demo/demo_c_0.adb106
-rw-r--r--demo/demo_c_0.asm529
-rw-r--r--demo/demo_c_0.c41
-rw-r--r--demo/demo_c_0.cdb278
-rw-r--r--demo/demo_c_0.hashes1
-rw-r--r--demo/demo_c_0.hex34
-rw-r--r--demo/demo_c_0.ihx34
-rw-r--r--demo/demo_c_0.lnk19
-rw-r--r--demo/demo_c_0.lst529
-rw-r--r--demo/demo_c_0.map488
-rw-r--r--demo/demo_c_0.mem28
-rw-r--r--demo/demo_c_0.rel378
-rw-r--r--demo/demo_c_0.rst529
-rw-r--r--demo/demo_c_0.sym659
-rw-r--r--demo/file.hex2
-rw-r--r--demo/file.lst292
-rw-r--r--demo/keypad_displaybin0 -> 1614 bytes
-rw-r--r--demo/keypad_display.adb106
-rw-r--r--demo/keypad_display.asm624
-rw-r--r--demo/keypad_display.c84
-rw-r--r--demo/keypad_display.cdb328
-rw-r--r--demo/keypad_display.hashes1
-rw-r--r--demo/keypad_display.hex49
-rw-r--r--demo/keypad_display.ihx49
-rw-r--r--demo/keypad_display.lnk19
-rw-r--r--demo/keypad_display.lst624
-rw-r--r--demo/keypad_display.map536
-rw-r--r--demo/keypad_display.mem28
-rw-r--r--demo/keypad_display.rel490
-rw-r--r--demo/keypad_display.rst624
-rw-r--r--demo/keypad_display.sym712
-rw-r--r--demo/keypad_display.vhw6
-rw-r--r--demo/ledmatrix.adb102
-rw-r--r--demo/ledmatrix.asm494
-rw-r--r--demo/ledmatrix.c43
-rw-r--r--demo/ledmatrix.cdb251
-rw-r--r--demo/ledmatrix.hashes1
-rw-r--r--demo/ledmatrix.hex26
-rw-r--r--demo/ledmatrix.ihx26
-rw-r--r--demo/ledmatrix.lnk19
-rw-r--r--demo/ledmatrix.lst494
-rw-r--r--demo/ledmatrix.m5ihib599
-rw-r--r--demo/ledmatrix.map454
-rw-r--r--demo/ledmatrix.mem28
-rw-r--r--demo/ledmatrix.rel328
-rw-r--r--demo/ledmatrix.rst494
-rw-r--r--demo/ledmatrix.sym634
-rw-r--r--demo/ledmatrix.vhc6
-rw-r--r--demo/mleddisplay.adf45
-rw-r--r--demo/mleddisplay.asm125
-rw-r--r--demo/mleddisplay.binbin0 -> 38 bytes
-rw-r--r--demo/mleddisplay.hex2
-rw-r--r--demo/mleddisplay.lst316
-rw-r--r--demo/mleddisplay.vhw5
91 files changed, 14982 insertions, 0 deletions
diff --git a/demo/Demo project.mcu8051ide b/demo/Demo project.mcu8051ide
new file mode 100644
index 0000000..21f2ef6
--- /dev/null
+++ b/demo/Demo project.mcu8051ide
@@ -0,0 +1,441 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!DOCTYPE tk_mcuide_project [
+
+ <!-- Declare entities -->
+ <!ENTITY quot "&#34;">
+ <!ENTITY amp "&#38;">
+ <!ENTITY lt "&#60;">
+ <!ENTITY gt "&#62;">
+
+ <!-- ROOT ELEMENT -->
+ <!ELEMENT tk_mcuide_project (general, other_options, compiler_options, files)>
+ <!-- Root element Parameters:
+ version - Project version (user defined)
+ date - Project last update (user defined)
+ creator_ver - MCU 8051 IDE version (hardcoded in program)
+ -->
+ <!ATTLIST tk_mcuide_project
+ version CDATA #IMPLIED
+ date CDATA #IMPLIED
+ creator_ver CDATA #IMPLIED
+ >
+
+ <!-- General information about the project -->
+ <!ELEMENT general (authors, copyright, licence, processor, options, graph, description, todo, calculator)>
+
+ <!-- List of project authors, one name per line -->
+ <!ELEMENT authors (#PCDATA)>
+
+ <!-- Copyrigh information -->
+ <!ELEMENT copyright (#PCDATA)>
+
+ <!-- Project licence -->
+ <!ELEMENT licence (#PCDATA)>
+
+ <!-- Processor type and configuration -->
+ <!ELEMENT processor EMPTY>
+
+ <!-- Parameters of tag "processor":
+ type - Processor type (e.g. AT89C51RC or 80C51)
+ clock - Clock frequency in kHz
+ xdata - Size of connected XDATA memory (0 means disconnected)
+ xcode - Size of connected XCODE memory (0 means disconnected)
+ -->
+ <!ATTLIST processor
+ type CDATA #IMPLIED
+ clock CDATA #IMPLIED
+ xdata CDATA #IMPLIED
+ xcode CDATA #IMPLIED
+ >
+
+ <!-- Various project options -->
+ <!ELEMENT options EMPTY>
+
+ <!-- Parameters of tag "options":
+ watches_file - Relative or absolute path to definition file of register watches
+ scheme - Relative or absolute path to scheme file
+ main_file - Main project source code file (e.g. main.c)
+ auto_sw_enabled - Automatic file switching during simulation locked
+ -->
+ <!ATTLIST options
+ watches_file CDATA #IMPLIED
+ scheme CDATA #IMPLIED
+ main_file CDATA #IMPLIED
+ auto_sw_enabled (0|1) #IMPLIED
+ >
+
+ <!-- Ports graph definition -->
+ <!ELEMENT graph EMPTY>
+
+ <!-- Parameters of tag "graph":
+ grid - Grid mode
+ magnification - Magnification level (must be an integer between 0 and 3)
+ enabled - Graph enable flag (Boolean value 0 or 1)
+ marks_s - List of state graph marks (String of zeros and ones, e.g. 00100110)
+ marks_l - List of laches graph marks (String of zeros and ones, e.g. 00100110)
+ marks_o - List of output graph marks (String of zeros and ones, e.g. 00100110)
+ active_page - Active page
+ -->
+ <!ATTLIST graph
+ grid (n|b|x|y) #IMPLIED
+ magnification (0|1|2|3) #IMPLIED
+ enabled (0|1) #IMPLIED
+ marks_s CDATA #IMPLIED
+ marks_l CDATA #IMPLIED
+ marks_o CDATA #IMPLIED
+ active_page CDATA #IMPLIED
+ >
+
+ <!-- Project description text (plain text only) -->
+ <!ELEMENT description (#PCDATA)>
+
+ <!-- Project to do list (SGML format) -->
+ <!ELEMENT todo (#PCDATA)>
+
+ <!-- Calculator configuration -->
+ <!ELEMENT calculator EMPTY>
+
+ <!-- Parameters of tag "calculator":
+ radix - Radix (one of {Dec Hex Bin Oct})
+ angle_unit - Angle unit (one of {deg rad grad})
+ display0 - Primary display
+ display1 - Opereator display
+ display2 - Secondary display
+ memory0 - Content of memory bank 0
+ memory1 - Content of memory bank 1
+ memory2 - Content of memory bank 2
+ freq - Timers preset calculator: Frequency
+ time - Timers preset calculator: Desired time
+ mode - Timers preset calculator: Timer mode (one of {0 1 2})
+ -->
+ <!ATTLIST calculator
+ radix (Dec|Hex|Bin|Oct) #IMPLIED
+ angle_unit (deg|rad|grad) #IMPLIED
+ display0 CDATA #IMPLIED
+ display1 CDATA #IMPLIED
+ display2 CDATA #IMPLIED
+ memory0 CDATA #IMPLIED
+ memory1 CDATA #IMPLIED
+ memory2 CDATA #IMPLIED
+ freq CDATA #IMPLIED
+ time CDATA #IMPLIED
+ mode (0|1|2) #IMPLIED
+ >
+
+ <!-- Other options (it can contain anything) -->
+ <!ELEMENT other_options (#PCDATA)>
+
+ <!-- Compiler options -->
+ <!ELEMENT compiler_options (#PCDATA)>
+
+ <!-- Project files -->
+ <!ELEMENT files (file)*>
+
+ <!-- Parameters of tag "files":
+ count - Number of project files
+ current_file - Current file in left/top view
+ current_file2 - Current file in right/bottom view (if it's less than zero then editor won't be splitted)
+ pwin_sash - Position of paned window sash (has meaning only if editor was splitted)
+ selected_view - Active view; 0 == left/top, 1 == right/bottom
+ pwin_orient - Orientation of paned window for multiview (one of {horizontal vertical})
+ -->
+ <!ATTLIST files
+ count CDATA #IMPLIED
+ current_file CDATA #IMPLIED
+ current_file2 CDATA #IMPLIED
+ pwin_sash CDATA #IMPLIED
+ selected_view (0|1) #IMPLIED
+ pwin_orient (horizontal|vertical) #IMPLIED
+ >
+
+ <!-- Project file description -->
+ <!ELEMENT file (actual_line, md5_hash, path, bookmarks, breakpoints, eol, encoding, notes)>
+
+ <!-- Parameters of tag "file":
+ name - File name without path
+ active - "yes" == opended; "no" == closed
+ o_bookmark - Bookmark in list of opened files
+ p_bookmark - Bookmark in list of project files
+ file_index - File index in the list
+ read_only - Read only flag
+ highlight - Syntax highlight
+ -->
+ <!ATTLIST file
+ name CDATA #IMPLIED
+ active (yes|no) #IMPLIED
+ o_bookmark (1|0) #IMPLIED
+ p_bookmark (1|0) #IMPLIED
+ file_index CDATA #IMPLIED
+ read_only (1|0) #IMPLIED
+ highlight CDATA #IMPLIED
+ >
+
+ <!-- Current line -->
+ <!ELEMENT actual_line EMPTY>
+
+ <!-- Parameters of tag "actual_line":
+ value - Current line in the file
+ -->
+ <!ATTLIST actual_line
+ value CDATA #IMPLIED
+ >
+
+ <!-- MD5 hash for the file -->
+ <!ELEMENT md5_hash EMPTY>
+
+ <!-- Parameters of tag "md5_hash":
+ value - Last MD5 hash
+ -->
+ <!ATTLIST md5_hash
+ value CDATA #IMPLIED
+ >
+
+ <!-- File path -->
+ <!ELEMENT path (#PCDATA)>
+
+ <!-- Bookmarks: string of zeros and ones -->
+ <!ELEMENT bookmarks (#PCDATA)>
+
+ <!-- Breakpoints: string of zeros and ones -->
+ <!ELEMENT breakpoints (#PCDATA)>
+
+ <!-- End Of Line character name -->
+ <!ELEMENT eol EMPTY>
+
+ <!-- Parameters of tag "eol":
+ value - EOL character (lf == "Line feed" 0x0A; cr == "Carriage return" 0x0D)
+ -->
+ <!ATTLIST eol
+ value (lf|cr|crlf) #IMPLIED
+ >
+
+ <!-- File encoding (we strongly recomend to use utf-8 only) -->
+ <!ELEMENT encoding EMPTY>
+
+ <!-- File notes -->
+ <!ELEMENT notes (#PCDATA)>
+
+ <!-- Parameters of tag "encoding":
+ value - Name of choosen encoding
+ -->
+ <!ATTLIST encoding
+ value CDATA #IMPLIED
+ >
+]>
+<tk_mcuide_project version="0.9.5" date="03/02/09" creator_ver="1.3.3">
+ <general>
+ <authors><![CDATA[Martin Osmera &lt;martin.osmera@gmail.com&gt;
+]]></authors>
+ <copyright><![CDATA[]]></copyright>
+ <licence><![CDATA[GPLv2]]></licence>
+ <processor type="AT89S2051" clock="12000" xdata="0" xcode="0"/>
+ <options
+ watches_file="demo.wtc"
+ scheme=""
+ main_file=""
+ auto_sw_enabled="1"
+ />
+ <graph
+ grid="y"
+ magnification="0"
+ enabled="1"
+ marks_s="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ marks_l="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ marks_o="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ active_page="output"
+ />
+ <description><![CDATA[This is demonstration project for MCU 8051 IDE and nothing more.
+
+Thank you for using MCU 8051 IDE.
+]]></description>
+ <todo><![CDATA[ <u><b>WELCOME TO MCU 8051 IDE</u></b>
+
+<u>What does it consist of:</u> <u>Basic key shortcuts:</u>
+ LEFT: <b>F2</b> - <i>Initialize simulator</i>
+<i> 1. List of opened files </i><b>F7</b> - <i>Step program</i>
+<i> 2. List of project files </i><b>F6</b> - <i>Animate program</i>
+<i> 3. Filesystem browser </i><b>F4</b> - <i>Reset simulator</i>
+<i> 4. SFR watches </i><b>CTRL+F7</b> - Step back
+ RIGHT: <bookmark/> Thank you for trying MCU 8051 IDE
+<i> 1. Bookmarks
+ 2. Breakpoints
+ 3. Symbol list
+ 4. Instruction details
+ 5. Register watches
+ 6. Subprograms monitor
+</i> 7. HW plug-ins
+ BOTTOM:
+<i> 1. Simulator panel
+ 2. C code debugger
+ 3. Graph of voltage levels on processor ports
+ 4. Messages text (Compiler output)
+ 5. This text editor
+ 6. Scientific calculator and calculator for computing timer preset
+ 7. Terminal emulator
+</i> 8. Tool for searching in files
+
+]]></todo>
+ <calculator
+ radix="Dec"
+ angle_unit="rad"
+ display0="88"
+ display1="add"
+ display2="99"
+ memory0="88"
+ memory1="66"
+ memory2="45"
+ freq="12000"
+ time="565"
+ mode="0"
+ />
+ </general>
+ <other_options><![CDATA[]]></other_options>
+ <compiler_options><![CDATA[{_title 0 _list 0 _print 0 _nomod 0 max_ihex_rec_length 255 _object 0 _pagelength 0 QUIET 0 _symbols 0 CREATE_SIM_FILE 1 CREATE_BIN_FILE 1 _pagewidth 0 optim_ena 0 _date 0 _paging 0 WARNING_LEVEL 0} 0 {--verbose 1 -i {} custom {} --columns 0 --omf-51 0} {adf 1} {-L 1 -M 0 custom {} -n 0 -P 0 -A 0 -a 0 -r {} -C 0 -c 0 -s 1 -U 0 -u 0 -g MAP -w 0 -cpu 8051 -x 0 -h 0 -quiet 0 -i {} -I 1} {ihex 1 adf 1} {--out-fmt-s19 0 --fdollars-in-identifiers 0 --nogcse 0 --nooverlay 1 --no-peep-comments 0 --no-c-code-in-asm 0 --print-search-dirs 0 --nostdlib 0 --peep-asm 0 --nolabelopt 0 --short-is-8bits 0 --cyclomatic 0 --compile-only 0 --no-reg-params 0 --noinvariant 0 --profile 0 --out-fmt-ihx 0 --noinduction 1 --opt-code-size 0 --nojtbound 0 --no-peep 0 --less-pedantic 0 --no-xinit-opt 0 --xstack 0 --funsigned-char 0 --verbose 1 -S 0 --debug 1 --preprocessonly 0 --opt-code-speed 0 --parms-in-bank1 0 --float-reent 0 -V 1 --c1mode 0 --fverbose-asm 0 --fommit-frame-pointer 0 --xram-movc 0 --main-return 0 --nostdinc 0 --noloopreverse 0 --stack-probe 0 --all-callee-saves 0 --int-long-reent 0 --stack-auto 0 --use-stdout 0} {standard --std-sdcc89 model --model-small stack --pack-iram custom {}} {--stack-size {} --code-loc {} --constseg {} --codeseg {} --xram-loc {} --data-loc {} --stack-loc {} --xstack-loc {} --lib-path {}} {--disable-warning {} -L {} -l {} -I {}} {} {}]]></compiler_options>
+ <files
+ count="9"
+ current_file="8"
+ current_file2="-1"
+ pwin_sash="304"
+ selected_view="0"
+ pwin_orient="horizontal">
+
+ <file name="demo0.asm" active="yes" o_bookmark="0" p_bookmark="0" file_index="0" read_only="0" highlight="0">
+ <actual_line value="1"/>
+ <md5_hash value="433B30D0A7A37EA31EA1FC96F9A63294"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 00000000000000001000000000000
+ </bookmarks>
+ <breakpoints>
+ 00000000000000000100000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[Basic demonstration code ...
+]]></notes>
+ </file>
+
+ <file name="demo1.asm" active="yes" o_bookmark="0" p_bookmark="0" file_index="1" read_only="0" highlight="0">
+ <actual_line value="1"/>
+ <md5_hash value="D9C47EC024BB961B1F86B2A2C82D6D7A"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 00000000000000000000000000000000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 00000000000000000000000000000000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[Quite more advance demonstration code ...
+]]></notes>
+ </file>
+
+ <file name="demo2.asm" active="yes" o_bookmark="0" p_bookmark="0" file_index="2" read_only="0" highlight="0">
+ <actual_line value="1"/>
+ <md5_hash value="016FCF566042EC66EE9118BAFA4D4A35"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[Next demonstration code ...
+]]></notes>
+ </file>
+
+ <file name="demo3.asm" active="yes" o_bookmark="0" p_bookmark="0" file_index="3" read_only="0" highlight="0">
+ <actual_line value="1"/>
+ <md5_hash value="6180D365C7F535CABD42C3E78A0798B9"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 00000000000000000000000000000000000000000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 00000000000000000000000000000000000000000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[]]></notes>
+ </file>
+
+ <file name="demo5.asm" active="yes" o_bookmark="0" p_bookmark="0" file_index="4" read_only="0" highlight="0">
+ <actual_line value="13"/>
+ <md5_hash value="8A77C444C26BA55C5A8AC82FE0C8CFA9"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[]]></notes>
+ </file>
+
+ <file name="demo_c_0.c" active="yes" o_bookmark="0" p_bookmark="0" file_index="5" read_only="0" highlight="1">
+ <actual_line value="1"/>
+ <md5_hash value="79C98C5ADE29831807D59F6BC438063A"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 0000000000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 0000000000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[]]></notes>
+ </file>
+
+ <file name="ledmatrix.c" active="yes" o_bookmark="0" p_bookmark="0" file_index="6" read_only="0" highlight="1">
+ <actual_line value="1"/>
+ <md5_hash value="517133F895352F3918C3E1250EA990A5"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 000000000000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 000000000000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[]]></notes>
+ </file>
+
+ <file name="keypad_display.c" active="yes" o_bookmark="0" p_bookmark="0" file_index="7" read_only="0" highlight="1">
+ <actual_line value="10"/>
+ <md5_hash value="E44E4DC2094E8EB729FE653002B40A33"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[]]></notes>
+ </file>
+
+ <file name="mleddisplay.asm" active="yes" o_bookmark="0" p_bookmark="0" file_index="8" read_only="0" highlight="0">
+ <actual_line value="15"/>
+ <md5_hash value="BFC1B21D558BFAE2B1E43162DAEFE347"/>
+ <path><![CDATA[]]></path>
+ <bookmarks>
+ 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ </bookmarks>
+ <breakpoints>
+ 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ </breakpoints>
+ <eol value="lf"/>
+ <encoding value="utf-8"/>
+ <notes><![CDATA[]]></notes>
+ </file>
+
+ </files>
+</tk_mcuide_project> \ No newline at end of file
diff --git a/demo/demo.wtc b/demo/demo.wtc
new file mode 100644
index 0000000..505abd2
--- /dev/null
+++ b/demo/demo.wtc
@@ -0,0 +1,15 @@
+# Watches definition file -- MCU 8051 IDE v1.3.1
+# Date: 10/27/2009
+ FF Register watches
+00FF Some XRAM reg
+ 0FF Some ERAM reg
+ 00 ----------------
+ 80 IDATA reg not SFR
+ 90 IDATA reg not SFR
+ A0 IDATA reg not SFR
+ B0 IDATA reg not SFR
+ D0 ----------------
+ .20 Some bit
+ .21 Another bit
+ 20 DATA_PTR
+ 0F COUNTER \ No newline at end of file
diff --git a/demo/demo0.adf b/demo/demo0.adf
new file mode 100644
index 0000000..7de7de2
--- /dev/null
+++ b/demo/demo0.adf
@@ -0,0 +1,9 @@
+# Assembler debug file for MCU 8051 IDE v1.1
+# Used assembler: MCU 8051 IDE
+# Date: 03/02/09
+87B0FFA871A3B2978A4FD4309AE5D3D4 "demo0.asm"
+0 8 0 8
+0 9 1 6
+0 10 2 184 127 251
+0 11 5 120 0
+0 12 7 128 247 \ No newline at end of file
diff --git a/demo/demo0.asm b/demo/demo0.asm
new file mode 100644
index 0000000..f44ee47
--- /dev/null
+++ b/demo/demo0.asm
@@ -0,0 +1,27 @@
+; MCU 8051 IDE - Demostration code
+; Very simple code
+
+; Press F2 and F6 to run the program (start simulator and animate)
+
+ org 0h
+
+main: inc R0
+ inc @R0
+ cjne R0, #07Fh, main
+ mov R0, #0d
+ sjmp main
+
+ end
+
+; <-- Bookmark (try Alt+PgUp/Alt+PgDown)
+; <-- Breakpoint
+
+; -----------------------------------------
+; NOTICE:
+; Simulator limitations:
+; * SPI
+; * Access to external code memory
+; * Power down modes
+; -----------------------------------------
+
+; IF YOU HAVE FOUND SOME BUG IN THIS IDE , PLEASE LET ME KNOW
diff --git a/demo/demo0.bin b/demo/demo0.bin
new file mode 100644
index 0000000..5511873
--- /dev/null
+++ b/demo/demo0.bin
@@ -0,0 +1 @@
+¸û \ No newline at end of file
diff --git a/demo/demo0.hex b/demo/demo0.hex
new file mode 100644
index 0000000..d34107a
--- /dev/null
+++ b/demo/demo0.hex
@@ -0,0 +1,2 @@
+:090000000806B87FFB780080F7C8
+:00000001FF \ No newline at end of file
diff --git a/demo/demo0.lst b/demo/demo0.lst
new file mode 100644
index 0000000..2a87958
--- /dev/null
+++ b/demo/demo0.lst
@@ -0,0 +1,198 @@
+demo0 PAGE 1
+ 1 ; MCU 8051 IDE - Demostration code
+ 2 ; Very simple code
+ 3
+ 4 ; Press F2 and F6 to run the program (start simulator and animate)
+ 5
+ 6 org 0h
+ 7
+0000 06 8 main: inc R0
+0001 B87FFB 9 inc @R0
+0002 7800 10 cjne R0, #07Fh, main
+0005 80F7 11 mov R0, #0d
+ 12 sjmp main
+ 13
+ 14 end
+ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS
+
+
+SYMBOL TABLE:
+AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
+ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED
+ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED
+ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED
+ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED
+ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED
+ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED
+AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
+AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
+B. . . . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED
+BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED
+BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED
+CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED
+CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED
+CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED
+CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED
+CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED
+CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED
+CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED
+CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED
+CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED
+CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED
+CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED
+CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED
+CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED
+CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED
+CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED
+CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED
+CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED
+CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED
+CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED
+CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED
+CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED
+CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED
+CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
+CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED
+CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
+CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
+DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
+DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DPL. . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
+EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED
+EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
+ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
+ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
+ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
+ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED
+EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
+EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
+EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
+EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
+EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED
+EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED
+F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
+FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED
+IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
+IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
+INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
+INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
+IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED
+IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED
+IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
+IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
+KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED
+KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED
+KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+MAIN . . . . . . . . . . . . . . . . C ADDR 0000H
+OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
+P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
+P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
+P1 . . . . . . . . . . . . . . . . . D ADDR 0090H NOT USED
+P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED
+P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED
+P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
+P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H NOT USED
+P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED
+P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
+P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED
+P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED
+P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED
+PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
+PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED
+PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
+RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
+RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
+RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
+RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
+REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
+RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED
+RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
+RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED
+RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED
+RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
+SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED
+SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
+SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
+SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED
+SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
+SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
+SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED
+SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED
+SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED
+SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED
+T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
+T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
+T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
+T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
+TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
+TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
+TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
+TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
+TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
+TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
+TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
+TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
+TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
+TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
+TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED
+TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED
+TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED
+TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED
+TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
+TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
+TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED
+TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED
+TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
+TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
+TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
+WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
+WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED \ No newline at end of file
diff --git a/demo/demo0.sim b/demo/demo0.sim
new file mode 100644
index 0000000..a2482bc
--- /dev/null
+++ b/demo/demo0.sim
@@ -0,0 +1,6 @@
+458DB610414A7EC882B8DFA06C1D6748 12/21/07 demo0.asm
+8 0 8
+9 1 6
+10 2 184 127 251
+11 5 120 0
+12 7 128 247 \ No newline at end of file
diff --git a/demo/demo1.adf b/demo/demo1.adf
new file mode 100644
index 0000000..e4387cf
--- /dev/null
+++ b/demo/demo1.adf
@@ -0,0 +1,19 @@
+# Assembler debug file for MCU 8051 IDE v1.1
+# Used assembler: MCU 8051 IDE
+# Date: 03/02/09
+D9C47EC024BB961B1F86B2A2C82D6D7A "demo1.asm"
+0 48 0 128 0
+0 52 2 117 144 15
+0 53 5 117 176 30
+0 54 8 128 0
+0 58 10 229 15
+0 58 12 4
+0 58 13 245 15
+0 58 15 133 144 176
+0 58 18 133 176 144
+0 58 21 211
+0 58 22 229 144
+0 58 24 35
+0 58 25 245 144
+0 59 27 128 237
+0 17 29 4 \ No newline at end of file
diff --git a/demo/demo1.asm b/demo/demo1.asm
new file mode 100644
index 0000000..3ba82dd
--- /dev/null
+++ b/demo/demo1.asm
@@ -0,0 +1,63 @@
+; MCU 8051 IDE - Demostration code
+; Macro instructions, conditional compilation and constants
+; Try tab "Graph" on bottom panel
+
+; Press F2 and F6 to run the program (start simulator and animate)
+
+$TITLE('DEMO 2') ; Set title for code listing
+$DATE(36/-4/1907) ; Set date for code listing
+
+; Constant definitions
+; --------------------
+counter idata 00Fh ; Counter of Px shifts
+x set 100 ; Some variable
+inc_dec equ 100 / X ; Flag: Increment/Decrement counter
+
+ cseg at 1FFh ; Code segment starts at 0x1FF
+something: db 4d ; Reserve 4 bytes in this segment
+
+; Macro instructions
+; --------------------
+
+;; Shift the given registeres
+shift macro reg0, reg1
+
+ ; Increment / Decrement counter
+ mov A, counter
+ if inc_dec <> 0
+ inc A
+ else
+ dec A
+ endif
+ $nolist ; <- Disable code listing
+ mov counter, A
+ $list ; <- Enable code listing
+
+ ; Shift
+ mov reg1, reg0
+ mov reg0, reg1
+ setb C
+ mov A, reg0
+ rl A
+ mov reg0, A
+endm
+
+; Program initilization
+; --------------------
+ org 0h
+ sjmp start
+
+; Program start
+; --------------------
+start: mov P1, #00Fh
+ mov P3, #01Eh
+ sjmp main
+
+; Main loop
+; --------------------
+main: shift P1, P3
+ sjmp main
+
+; Program end
+; --------------------
+ end
diff --git a/demo/demo1.bin b/demo/demo1.bin
new file mode 100644
index 0000000..4f74af1
--- /dev/null
+++ b/demo/demo1.bin
Binary files differ
diff --git a/demo/demo1.hex b/demo/demo1.hex
new file mode 100644
index 0000000..f83cb51
--- /dev/null
+++ b/demo/demo1.hex
@@ -0,0 +1,2 @@
+:1E000000800075900F75B01E8000E50F04F50F8590B085B090D3E59023F59080ED04A4
+:00000001FF \ No newline at end of file
diff --git a/demo/demo1.lst b/demo/demo1.lst
new file mode 100644
index 0000000..25d0ef4
--- /dev/null
+++ b/demo/demo1.lst
@@ -0,0 +1,262 @@
+demo1 DEMO 2 36/-4/1907 PAGE 1
+ 1 ; MCU 8051 IDE - Demostration code
+ 2 ; Macro instructions, conditional compilation and constants
+ 3 ; Try tab "Graph" on bottom panel
+ 4
+ 5 ; Press F2 and F6 to run the program (start simulator and animate)
+ 6
+ 7 $TITLE('DEMO 2') ; Set title for code listing
+ 8 $DATE(36/-4/1907) ; Set date for code listing
+ 9
+ 10 ; Constant definitions
+ 11 ; --------------------
+ 000F 12 counter idata 00Fh ; Counter of Px shifts
+ 0064 13 x set 100 ; Some variable
+ 0001 14 inc_dec equ 100 / X ; Flag: Increment/Decrement counter
+ 15
+ 16 cseg at 1FFh ; Code segment starts at 0x1FF
+ 17 something: db 4d ; Reserve 4 bytes in this segment
+ 18
+ 19 ; Macro instructions
+ 20 ; --------------------
+ 21
+ 22 ;; Shift the given registeres
+ 23 shift macro reg0, reg1
+ 24
+ 25 ; Increment / Decrement counter
+ 26 mov A, counter
+ 27 if inc_dec <> 0
+ 28 inc A
+ 29 else
+ 30 dec A
+ 31 endif
+ 33 mov counter, A
+ 34 $list ; <- Enable code listing
+ 35
+ 36 ; Shift
+ 37 mov reg1, reg0
+ 38 mov reg0, reg1
+ 39 setb C
+ 40 mov A, reg0
+ 41 rl A
+ 42 mov reg0, A
+ 43 endm
+ 44
+ 45 ; Program initilization
+ 46 ; --------------------
+0000 75900F 47 org 0h
+0002 75B01E 48 sjmp start
+ 49
+ 50 ; Program start
+ 51 ; --------------------
+0005 8000 52 start: mov P1, #00Fh
+0008 E50F 53 mov P3, #01Eh
+ 54 +1 sjmp main
+ 55 +1
+000A 04 56 +1 mov a, counter
+000C F50F 57 +1 inc a
+000D 8590B0 58 +1 mov counter, a
+ 59 +1
+000F 85B090 60 +1 mov p3, p1
+0012 D3 61 +1 mov p1, p3
+0015 E590 62 +1 setb c
+0016 23 63 +1 mov a, p1
+0018 F590 64 +1 rl a
+0019 80ED 65 +1 mov p1, a
+ 66
+ 67 ; Main loop
+ 68 ; --------------------
+ 69 main: shift P1, P3
+ 70 sjmp main
+ 71
+ 72 ; Program end
+ 73 ; --------------------
+ 74 end
+ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS
+
+
+SYMBOL TABLE:
+AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
+ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED
+ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED
+ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED
+ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED
+ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED
+ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED
+AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
+AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
+B. . . . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED
+BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED
+BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED
+CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED
+CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED
+CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED
+CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED
+CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED
+CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED
+CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED
+CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED
+CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED
+CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED
+CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED
+CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED
+CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED
+CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED
+CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED
+CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED
+CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED
+CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED
+CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED
+CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED
+CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED
+CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED
+COUNTER. . . . . . . . . . . . . . . I ADDR 000FH
+CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
+CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED
+CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
+CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
+DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
+DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DPL. . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
+EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED
+EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
+ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
+ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
+ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
+ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED
+EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
+EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
+EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
+EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
+EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED
+EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED
+F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
+FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED
+IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
+IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
+INC_DEC. . . . . . . . . . . . . . . N NUMB 0001H NOT USED
+INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
+INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
+IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED
+IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED
+IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
+IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
+KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED
+KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED
+KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+MAIN . . . . . . . . . . . . . . . . C ADDR 000AH
+OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
+P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
+P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
+P1 . . . . . . . . . . . . . . . . . D ADDR 0090H
+P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED
+P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED
+P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
+P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H
+P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED
+P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
+P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED
+P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED
+P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED
+PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
+PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED
+PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
+RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
+RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
+RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
+RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
+REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
+RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED
+RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
+RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED
+RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED
+RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
+SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED
+SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
+SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
+SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED
+SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
+SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
+SOMETHING. . . . . . . . . . . . . . C ADDR 001DH NOT USED
+SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED
+SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED
+SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED
+SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED
+START. . . . . . . . . . . . . . . . C ADDR 0002H
+T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
+T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
+T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
+T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
+TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
+TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
+TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
+TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
+TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
+TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
+TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
+TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
+TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
+TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
+TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED
+TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED
+TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED
+TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED
+TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
+TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
+TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED
+TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED
+TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
+TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
+TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
+WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
+WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED
+X. . . . . . . . . . . . . . . . . . NUMB 0064H NOT USED REDEFINABLE \ No newline at end of file
diff --git a/demo/demo1.sim b/demo/demo1.sim
new file mode 100644
index 0000000..1d235f3
--- /dev/null
+++ b/demo/demo1.sim
@@ -0,0 +1,16 @@
+C4FD5C3C2DF98DDEE6FE5ACA0FD745A8 12/21/07 demo1.asm
+48 0 128 0
+52 2 117 144 15
+53 5 117 176 30
+54 8 128 0
+58 10 229 15
+58 12 4
+58 13 245 15
+58 15 133 176 144
+58 18 133 144 176
+58 21 211
+58 22 229 144
+58 24 35
+58 25 245 144
+59 27 128 237
+17 511 4 \ No newline at end of file
diff --git a/demo/demo2.adf b/demo/demo2.adf
new file mode 100644
index 0000000..f542c32
--- /dev/null
+++ b/demo/demo2.adf
@@ -0,0 +1,50 @@
+# Assembler debug file for MCU 8051 IDE v1.3.1
+# Used assembler: MCU 8051 IDE
+# Date: 10/27/2009
+016FCF566042EC66EE9118BAFA4D4A35 "demo2.asm"
+0 47 0 128 28
+0 50 11 128 0
+0 56 13 127 26
+0 57 15 126 0
+0 58 17 238
+0 58 18 144 0 47
+0 58 21 147
+0 58 22 141 130
+0 58 24 240
+0 58 25 13
+0 58 26 14
+0 59 27 223 244
+0 60 29 50
+0 65 30 125 0
+0 66 32 117 168 255
+0 67 35 117 138 255
+0 68 38 117 137 3
+0 69 41 210 140
+0 70 43 128 0
+0 74 45 128 254
+0 28 47 87
+0 28 48 101
+0 28 49 108
+0 28 50 99
+0 28 51 111
+0 28 52 109
+0 28 53 101
+0 28 54 32
+0 28 55 105
+0 28 56 110
+0 28 57 32
+0 28 58 77
+0 28 59 67
+0 28 60 85
+0 28 61 32
+0 28 62 56
+0 28 63 48
+0 28 64 53
+0 28 65 49
+0 28 66 32
+0 28 67 73
+0 28 68 68
+0 28 69 69
+0 28 70 32
+0 28 71 33
+0 28 72 32 \ No newline at end of file
diff --git a/demo/demo2.asm b/demo/demo2.asm
new file mode 100644
index 0000000..d3f595d
--- /dev/null
+++ b/demo/demo2.asm
@@ -0,0 +1,78 @@
+; MCU 8051 IDE - Demostration code
+; Interrupts, hexadecimal editor and code validator
+; ------------------------------------------------------
+; THIS REQUIRES ANOTHER MCU THAN AT89C2051 BECAUSE
+; AT89C2051 HAS NO XDATA MENORY. CLICK ON
+; [Main menu] -> [Project] -> [Edit project] AND SELECT
+; FOR INSTANCE AT89C51 AND SET XDATA TO SOME VALUE
+; ------------------------------------------------------
+
+; * Click on [Main menu] -> [Simulator] -> [Show XDATA memory]
+; * Press F2 and F6 (start simulator and animate)
+
+
+
+; Code with syntax errors
+ nolist ; Disable code listing
+if 0
+ mov A, #55d, B ; too many operands
+ inc 0FFh,, 04x4h ; invalid operands
+ db (4 *** 5) ; invalid expression
+label?: mul B ; ivalid label and invalid operand
+endif
+ list ; Enable code listing
+
+; Constants
+; --------------------
+ cseg at 0D0h
+string: db 'Welcome in MCU 8051 IDE ! '
+
+string_legth equ 26d
+
+; Macro instructions
+; --------------------
+write_to_xdata macro str, code_ptr, xdata_ptr
+ mov A, code_ptr
+ mov DPTR, #str
+ movc A, @A+DPTR
+ mov DPL, xdata_ptr
+ movx @DPTR, A
+ inc xdata_ptr
+ inc code_ptr
+endm
+
+; Program initilization
+; --------------------
+ org 0h ; Reset vector
+ sjmp start
+
+ org 0Bh ; Interrupt vector - T0
+ sjmp T0_int
+
+; Subprograms
+; --------------------
+
+;; Hadnle interrupt from TF0
+T0_int: mov R7, #string_legth
+ mov R6, #0h
+loop: write_to_xdata string, R6, R5
+ djnz R7, loop
+ reti
+
+; Program start
+; --------------------
+start: ; Start timer 0 in mode 2
+ mov R5, #0h
+ mov IE, #0FFh
+ mov TL0, #255d
+ mov TMOD, #03h
+ setb TR0
+ sjmp main
+
+; Main loop
+; --------------------
+main: sjmp $ ; Inifinite loop
+
+; Program end
+; --------------------
+ end
diff --git a/demo/demo2.bin b/demo/demo2.bin
new file mode 100644
index 0000000..031c85b
--- /dev/null
+++ b/demo/demo2.bin
Binary files differ
diff --git a/demo/demo2.hex b/demo/demo2.hex
new file mode 100644
index 0000000..1139f92
--- /dev/null
+++ b/demo/demo2.hex
@@ -0,0 +1,3 @@
+:02000000801C62
+:3E000B0080007F1A7E00EE90002F938D82F00D0EDFF4327D0075A8FF758AFF758903D28C800080FE57656C636F6D6520696E204D4355203830353120494445202120C4
+:00000001FF \ No newline at end of file
diff --git a/demo/demo2.lst b/demo/demo2.lst
new file mode 100644
index 0000000..4ce2673
--- /dev/null
+++ b/demo/demo2.lst
@@ -0,0 +1,270 @@
+demo2 PAGE 1
+0048 80FE 1 ; MCU 8051 IDE - Demostration code
+ 2 ; Interrupts, hexadecimal editor and code validator
+ 3 ; ------------------------------------------------------
+ 4 ; THIS REQUIRES ANOTHER MCU THAN AT89C2051 BECAUSE
+ 5 ; AT89C2051 HAS NO XDATA MENORY. CLICK ON
+ 6 ; [Main menu] -> [Project] -> [Edit project] AND SELECT
+ 7 ; FOR INSTANCE AT89C51 AND SET XDATA TO SOME VALUE
+ 8 ; ------------------------------------------------------
+ 9
+ 10 ; * Click on [Main menu] -> [Simulator] -> [Show XDATA memory]
+ 11 ; * Press F2 and F6 (start simulator and animate)
+ 12
+ 13
+ 14
+ 15 ; Code with syntax errors
+ 16 nolist ; Disable code listing
+ 23 list ; Enable code listing
+ 24
+ 25 ; Constants
+ 26 ; --------------------
+ 27 cseg at 0D0h
+ 28 string: db 'Welcome in MCU 8051 IDE ! '
+ 29
+ 001A 30 string_legth equ 26d
+ 31
+ 32 ; Macro instructions
+ 33 ; --------------------
+ 34 write_to_xdata macro str, code_ptr, xdata_ptr
+ 35 mov A, code_ptr
+ 36 mov DPTR, #str
+ 37 movc A, @A+DPTR
+ 38 mov DPL, xdata_ptr
+ 39 movx @DPTR, A
+ 40 inc xdata_ptr
+ 41 inc code_ptr
+ 42 endm
+ 43
+ 44 ; Program initilization
+ 45 ; --------------------
+0000 801C 46 org 0h ; Reset vector
+ 47 sjmp start
+ 48
+ 49 org 0Bh ; Interrupt vector - T0
+ 50 sjmp T0_int
+ 51
+ 52 ; Subprograms
+ 53 ; --------------------
+ 54
+ 55 ;; Hadnle interrupt from TF0
+ 56 T0_int: mov R7, #string_legth
+ 57 mov R6, #0h
+ 58 +1 loop: write_to_xdata string, R6, R5
+ 59 +1 mov a, r6
+ 60 +1 mov dptr, #string
+ 61 +1 movc a, @a+dptr
+ 62 +1 mov dpl, r5
+ 63 +1 movx @dptr, a
+ 64 +1 inc r5
+ 65 +1 inc r6
+ 66 djnz R7, loop
+ 67 reti
+ 68
+ 69 ; Program start
+ 70 ; --------------------
+ 71 start: ; Start timer 0 in mode 2
+ 72 mov R5, #0h
+ 73 mov IE, #0FFh
+ 74 mov TL0, #255d
+ 75 mov TMOD, #03h
+ 76 setb TR0
+ 77 sjmp main
+ 78
+ 79 ; Main loop
+ 80 ; --------------------
+ 81 main: sjmp $ ; Inifinite loop
+ 82
+ 83 ; Program end
+ 84 ; --------------------
+ 85 end
+ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS
+
+
+SYMBOL TABLE:
+??MCU_8051_IDE . . . . . . . . . . . N NUMB 8051H NOT USED
+??VERSION. . . . . . . . . . . . . . N NUMB 0131H NOT USED
+AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
+ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED
+ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED
+ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED
+ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED
+ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED
+ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED
+AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
+AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
+B. . . . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED
+BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED
+BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED
+CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED
+CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED
+CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED
+CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED
+CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED
+CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED
+CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED
+CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED
+CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED
+CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED
+CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED
+CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED
+CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED
+CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED
+CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED
+CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED
+CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED
+CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED
+CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED
+CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED
+CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED
+CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED
+CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
+CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED
+CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
+CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
+DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
+DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DPL. . . . . . . . . . . . . . . . . D ADDR 0082H
+EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
+EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED
+EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
+ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
+ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
+ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
+ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED
+EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
+EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
+EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
+EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
+EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED
+EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED
+F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
+FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+IE . . . . . . . . . . . . . . . . . D ADDR 00A8H
+IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
+IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
+INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
+INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
+IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED
+IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED
+IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
+IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
+KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED
+KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED
+KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+LOOP . . . . . . . . . . . . . . . . C ADDR 0011H
+MAIN . . . . . . . . . . . . . . . . C ADDR 002DH
+OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
+P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
+P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
+P1 . . . . . . . . . . . . . . . . . D ADDR 0090H NOT USED
+P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED
+P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED
+P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
+P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H NOT USED
+P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED
+P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
+P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED
+P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED
+P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED
+PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
+PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED
+PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
+RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
+RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
+RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
+RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
+REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
+RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED
+RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
+RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED
+RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED
+RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
+SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED
+SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
+SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
+SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED
+SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
+SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
+SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED
+SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED
+SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED
+SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED
+START. . . . . . . . . . . . . . . . C ADDR 001EH
+STRING . . . . . . . . . . . . . . . C ADDR 002FH
+STRING_LEGTH . . . . . . . . . . . . N NUMB 001AH
+T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
+T0_INT . . . . . . . . . . . . . . . C ADDR 000DH
+T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
+T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
+T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
+TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
+TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
+TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
+TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
+TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
+TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
+TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
+TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
+TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
+TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
+TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED
+TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED
+TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED
+TL0. . . . . . . . . . . . . . . . . D ADDR 008AH
+TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
+TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
+TMOD . . . . . . . . . . . . . . . . D ADDR 0089H
+TR0. . . . . . . . . . . . . . . . . B ADDR 008CH
+TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
+TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
+TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
+WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
+WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED \ No newline at end of file
diff --git a/demo/demo2.sim b/demo/demo2.sim
new file mode 100644
index 0000000..4230f05
--- /dev/null
+++ b/demo/demo2.sim
@@ -0,0 +1,47 @@
+3E5C5EAE0BA81D024AAE08DD4B210650 12/21/07 demo2.asm
+47 0 128 28
+50 11 128 0
+56 13 127 26
+57 15 126 0
+58 17 238
+58 18 144 0 208
+58 21 147
+58 22 141 130
+58 24 240
+58 25 13
+58 26 14
+59 27 223 244
+60 29 50
+65 30 125 0
+66 32 117 168 255
+67 35 117 138 255
+68 38 117 137 3
+69 41 210 140
+70 43 128 0
+74 45 128 254
+28 208 87
+28 209 101
+28 210 108
+28 211 99
+28 212 111
+28 213 109
+28 214 101
+28 215 32
+28 216 105
+28 217 110
+28 218 32
+28 219 77
+28 220 67
+28 221 85
+28 222 32
+28 223 56
+28 224 48
+28 225 53
+28 226 49
+28 227 32
+28 228 73
+28 229 68
+28 230 69
+28 231 32
+28 232 33
+28 233 32 \ No newline at end of file
diff --git a/demo/demo3.adf b/demo/demo3.adf
new file mode 100644
index 0000000..64c2b62
--- /dev/null
+++ b/demo/demo3.adf
@@ -0,0 +1,9 @@
+# Assembler debug file for MCU 8051 IDE v1.1
+# Used assembler: MCU 8051 IDE
+# Date: 03/02/09
+6180D365C7F535CABD42C3E78A0798B9 "demo3.asm"
+0 67 0 128 254
+0 35 2 51
+0 35 3 52
+0 36 4 51
+0 36 5 52 \ No newline at end of file
diff --git a/demo/demo3.asm b/demo/demo3.asm
new file mode 100644
index 0000000..d93d260
--- /dev/null
+++ b/demo/demo3.asm
@@ -0,0 +1,72 @@
+; MCU 8051 IDE - Demostration code
+; Compiler directives
+
+
+$DATE(32/13/1907)   ; Places date in page header
+; $EJECT ; Places a form feed in listing
+; $INCLUDE(file.asm) ; Inserts file in source program
+; $LIST ; Allows listing to be output
+; $NOLIST ; Stops outputting the listing
+; $NOMOD ; No predefined symbols used
+$OBJECT(file.hex) ; Places object output in file
+; $NOOBJECT ; No object file is generated
+$PAGING ; Break output listing into pages
+; $NOPAGING ; Print listing w/o page breaks
+$PAGELENGTH(10) ; No. of lines on a listing page
+$PAGEWIDTH(20)    ; No. of columns on a listing page
+$PRINT(file.lst) ; Places listing output in file
+; $NOPRINT ; Listing will not be output
+; $SYMBOLS ; Append symbol table to listing
+; $NOSYMBOLS ; Symbol table will not be output
+$TITLE('demo - 3') ; Places string in page header
+
+
+;; Summary of Cross Assembler Directives
+;; -------------------------------------
+
+a EQU 54d ; Define symbol
+b0 DATA a / 2 ; Define internal memory symbol
+c IDATA (b0*2-5) ; Define indirectly addressed internal memory
+d BIT 070Q ; Define internal bit memory symbol
+e CODE 0FFA5h ; Define program memory symbol
+var SET (A * 44) MOD 9 - 14 ; Variable defined by an expression
+
+ CSEG at 20h ; Select program memory space
+x: DB '34' ; Store byte values in program memory
+y: DW 3334h ; Store word values in program memory
+
+ DSEG at 5d ; Select internal memory data space
+m: DS 1 ; Reserve bytes of data memory
+
+ xseg ; Select external memory data space
+n: DS 1 ; Reserve bytes of data memory
+
+ ISEG ; Select indirectly addressed internal memory space
+o: DS 1 ; Reserve bytes of data memory
+
+ NOLIST ; Disable code listing
+ BSEG ; Select bit addressable memory space
+r: DBIT 4 ; Reserve bits of bit memory
+ LIST ; Enable code listing
+
+
+mc macro label ; Define macro instruction
+ IF 2 <> 2 OR 1 = 4
+ EXITM ; Exit macro
+ ENDIF
+ sjmp label
+endm ; End of definition
+
+main: ORG 0 ; Set segment location counter
+ IF 0 ; Begin conditional assembly block
+ USING 2 ; Select register bank (define AR0..7)
+ ELSE ; Alternative conditional assembly block
+ USING 2 ; Select register bank (define AR0..7)
+ ENDIF ; End conditional assembly block
+
+ mc main ; Macro instuction
+
+ END ; End of assembly language source file
+
+
+; This is a very long line, try to avoid them. This is a very long line, try to avoid them. This is a very long line, try to avoid them. This is a very long line, try to avoid them. This is a very long line, try to avoid them. This is a very long line, try to avoid them. This is a very long line, try to avoid them.This is a very long line, try to avoid them. This is a very long line, try to avoid them.This is a very long line, try to avoid them. This is a very long line, try to avoid them. This is a very long line, try to avoid them. This is a very long line, try to avoid them.
diff --git a/demo/demo3.bin b/demo/demo3.bin
new file mode 100644
index 0000000..45d3d20
--- /dev/null
+++ b/demo/demo3.bin
@@ -0,0 +1 @@
+€þ3 \ No newline at end of file
diff --git a/demo/demo3.sim b/demo/demo3.sim
new file mode 100644
index 0000000..ef0cd1f
--- /dev/null
+++ b/demo/demo3.sim
@@ -0,0 +1,6 @@
+6180D365C7F535CABD42C3E78A0798B9 12/21/07 demo3.asm
+67 0 128 254
+35 32 51
+35 33 52
+36 34 51
+36 35 52 \ No newline at end of file
diff --git a/demo/demo4.adf b/demo/demo4.adf
new file mode 100644
index 0000000..fb6a934
--- /dev/null
+++ b/demo/demo4.adf
@@ -0,0 +1,45 @@
+# Assembler Debug File created by MCU 8051 IDE v1.0.5
+# Used assembler: MCU 8051 IDE
+# Date: 04/30/08
+7E1BFADD8BDB7A40D6B8CA5161E3113A "demo4.asm"
+0 27 0 128 64
+0 30 3 210 152
+0 30 5 210 153
+0 30 7 17 58
+0 30 9 50
+0 33 11 210 152
+0 33 13 210 153
+0 33 15 17 58
+0 33 17 50
+0 36 19 210 152
+0 36 21 210 153
+0 36 23 17 58
+0 36 25 50
+0 39 27 210 152
+0 39 29 210 153
+0 39 31 17 58
+0 39 33 50
+0 42 35 210 152
+0 42 37 210 153
+0 42 39 17 58
+0 42 41 50
+0 45 43 210 152
+0 45 45 210 153
+0 45 47 17 58
+0 45 49 50
+0 48 51 210 152
+0 48 53 210 153
+0 48 55 17 58
+0 48 57 50
+0 53 58 127 16
+0 54 60 17 63
+0 55 62 34
+0 58 63 223 254
+0 59 65 34
+0 66 66 210 141
+0 67 68 210 143
+0 68 70 210 137
+0 69 72 210 139
+0 72 74 117 168 255
+0 73 77 210 188
+0 76 79 128 254 \ No newline at end of file
diff --git a/demo/demo4.asm b/demo/demo4.asm
new file mode 100644
index 0000000..662c740
--- /dev/null
+++ b/demo/demo4.asm
@@ -0,0 +1,81 @@
+; MCU 8051 IDE - Demostration code
+; Interrupt monitor and list of active subprograms
+
+; 1) Press Ctrl+0 to show tab "List of subprograms" on righ panel
+; 2) Run interrupt monitor
+; (Main menu: Simulator -> Interrupt monitor)
+; 3) Press F2 to start simulator and F6 to run animation mode
+
+; Macro instructions
+; ------------------
+
+;; Handle interrupt
+intr macro
+ ; Set UART interrupt flags
+ setb RI
+ setb TI
+
+ ; Wait a while and return from interrupt
+ acall wait
+ reti
+endm
+
+
+; Interrupt vectors
+; -----------------
+ org 00h ; Reset
+ ajmp start
+
+ org 03h ; External 0
+ intr
+
+ org 0Bh ; Timer 0
+ intr
+
+ org 13h ; External 0
+ intr
+
+ org 1Bh ; Timer 1
+ intr
+
+ org 23h ; UART and SPI
+ intr
+
+ org 2Bh ; Timer 2
+ intr
+
+ org 33h ; Analog comparator
+ intr
+
+; Subprograms
+; -----------------
+wait: ; Wait for 24 cycles
+ mov R7, #10h
+ acall wait_aux
+ ret
+
+wait_aux:
+ djnz R7, $
+ ret
+
+
+; Program start
+; -----------------
+start:
+ ; Set some interrupt bits
+ setb TF0
+ setb TF1
+ setb IE0
+ setb IE1
+
+ ; Enable all interrupts and set priorities
+ mov IE, #0FFh
+ setb PS
+
+ ; Infinite loop
+ sjmp $
+
+
+; End of code
+; -----------------
+ end
diff --git a/demo/demo4.bin b/demo/demo4.bin
new file mode 100644
index 0000000..413b6f7
--- /dev/null
+++ b/demo/demo4.bin
Binary files differ
diff --git a/demo/demo4.hex b/demo/demo4.hex
new file mode 100644
index 0000000..20def10
--- /dev/null
+++ b/demo/demo4.hex
@@ -0,0 +1,9 @@
+:0200000080403E
+:07000300D298D299113A32A4
+:07000B00D298D299113A329C
+:07001300D298D299113A3294
+:07001B00D298D299113A328C
+:07002300D298D299113A3284
+:07002B00D298D299113A327C
+:1E003300D298D299113A327F10113F22DFFE22D28DD28FD289D28B75A8FFD2BC80FEBD
+:00000001FF \ No newline at end of file
diff --git a/demo/demo4.lst b/demo/demo4.lst
new file mode 100644
index 0000000..867750e
--- /dev/null
+++ b/demo/demo4.lst
@@ -0,0 +1,228 @@
+demo4 PAGE 1
+ 1 ; MCU 8051 IDE - Demostration code
+ 2 ; Interrupt monitor and list of active subprograms
+ 3
+ 4 ; 1) Press Ctrl+0 to show tab "List of subprograms" on righ panel
+ 5 ; 2) Run interrupt monitor
+ 6 ; (Main menu: Simulator -> Interrupt monitor)
+ 7 ; 3) Press F2 to start simulator and F6 to run animation mode
+ 8
+ 9 ; Macro instructions
+ 10 ; ------------------
+ 11
+ 12 ;; Handle interrupt
+ 13 intr macro
+ 14 ; Set UART interrupt flags
+ 15 setb RI
+ 16 setb TI
+ 17
+ 18 ; Wait a while and return from interrupt
+ 19 acall wait
+ 20 reti
+ 21 endm
+ 22
+ 23
+ 24 ; Interrupt vectors
+ 25 ; -----------------
+ 26 org 00h ; Reset
+0000 D298 27 ajmp start
+ 28
+ 29 +1 org 03h ; External 0
+ 30 +2
+ 31 +3
+ 32 +4
+ 33 +5
+ 34 +6
+ 35 +7
+ 36 +7
+ 37 +7 setb RI
+000B 113F 38 +7 setb TI
+000D 22 39 +7
+ 40 +7 acall wait
+000F DFFE 41 +7 reti
+ 42 +6 setb RI
+0011 22 43 +6 setb TI
+ 44 +6
+ 45 +6 acall wait
+0013 D28F 46 +6 reti
+ 47 +5 setb RI
+0015 D289 48 +5 setb TI
+ 49 +5
+0017 D28B 50 +5 acall wait
+0019 75A8FF 51 +5 reti
+ 52 +4 setb RI
+ 53 +4 setb TI
+ 54 +4
+001B 80FE 55 +4 acall wait
+ 56 +4 reti
+ 57 +3 setb RI
+ 58 +3 setb TI
+ 59 +3
+ 60 +3 acall wait
+ 61 +3 reti
+ 62 +2 setb RI
+ 63 +2 setb TI
+ 64 +2
+ 65 +2 acall wait
+ 66 +2 reti
+ 67 +1 setb RI
+ 68 +1 setb TI
+ 69 +1
+ 70 +1 acall wait
+ 71 +1 reti
+ 72 intr
+ 73
+ 74 org 0Bh ; Timer 0
+ 75 intr
+ 76
+ 77 org 13h ; External 0
+ 78 intr
+ 79
+ 80 org 1Bh ; Timer 1
+ 81 intr
+ 82
+ 83 org 23h ; UART and SPI
+ 84 intr
+ 85
+ 86 org 2Bh ; Timer 2
+ 87 intr
+ 88
+ 89 org 33h ; Analog comparator
+ 90 intr
+ 91
+ 92 ; Subprograms
+ 93 ; -----------------
+ 94 wait: ; Wait for 24 cycles
+ 95 mov R7, #10h
+ 96 acall wait_aux
+ 97 ret
+ 98
+ 99 wait_aux:
+ 100 djnz R7, $
+ 101 ret
+ 102
+ 103
+ 104 ; Program start
+ 105 ; -----------------
+ 106 start:
+ 107 ; Set some interrupt bits
+ 108 setb TF0
+ 109 setb TF1
+ 110 setb IE0
+ 111 setb IE1
+ 112
+ 113 ; Enable all interrupts and set priorities
+ 114 mov IE, #0FFh
+ 115 setb PS
+ 116
+ 117 ; Infinite loop
+ 118 sjmp $
+ 119
+ 120
+ 121 ; End of code
+ 122 ; -----------------
+ 123 end
+ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS
+
+
+SYMBOL TABLE:
+AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
+ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED
+ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
+AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
+B. . . . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED
+CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
+CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
+CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
+DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
+DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DPL. . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
+EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
+ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
+ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
+ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
+EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
+EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
+EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
+EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
+F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
+IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED
+IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
+IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
+INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
+INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
+IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
+IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
+OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
+P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
+P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
+P1 . . . . . . . . . . . . . . . . . D ADDR 0090H NOT USED
+P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
+P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H NOT USED
+P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
+PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
+PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED
+PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
+RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
+RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
+RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
+RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
+REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
+RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
+RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED
+RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED
+RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
+SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
+SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
+SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
+SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
+SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED
+SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+START. . . . . . . . . . . . . . . . C ADDR 0042H NOT USED
+T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
+T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
+T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
+T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
+TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
+TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
+TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
+TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
+TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
+TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
+TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
+TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
+TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
+TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
+TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED
+TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
+TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
+TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED
+TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED
+TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
+TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
+TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
+WAIT . . . . . . . . . . . . . . . . C ADDR 003AH NOT USED
+WAIT_AUX . . . . . . . . . . . . . . C ADDR 003FH NOT USED
+WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
+WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED \ No newline at end of file
diff --git a/demo/demo4.sim b/demo/demo4.sim
new file mode 100644
index 0000000..52643cc
--- /dev/null
+++ b/demo/demo4.sim
@@ -0,0 +1,42 @@
+7E1BFADD8BDB7A40D6B8CA5161E3113A 01/14/08 demo4.asm
+27 0 128 64
+30 3 210 152
+30 5 210 153
+30 7 17 58
+30 9 50
+33 11 210 152
+33 13 210 153
+33 15 17 58
+33 17 50
+36 19 210 152
+36 21 210 153
+36 23 17 58
+36 25 50
+39 27 210 152
+39 29 210 153
+39 31 17 58
+39 33 50
+42 35 210 152
+42 37 210 153
+42 39 17 58
+42 41 50
+45 43 210 152
+45 45 210 153
+45 47 17 58
+45 49 50
+48 51 210 152
+48 53 210 153
+48 55 17 58
+48 57 50
+53 58 127 16
+54 60 17 63
+55 62 34
+58 63 223 254
+59 65 34
+66 66 210 141
+67 68 210 143
+68 70 210 137
+69 72 210 139
+72 74 117 168 255
+73 77 210 188
+76 79 128 254 \ No newline at end of file
diff --git a/demo/demo5.adf b/demo/demo5.adf
new file mode 100644
index 0000000..de35ed8
--- /dev/null
+++ b/demo/demo5.adf
@@ -0,0 +1,5 @@
+# Assembler debug file for MCU 8051 IDE v1.1
+# Used assembler: MCU 8051 IDE
+# Date: 03/02/09
+8A77C444C26BA55C5A8AC82FE0C8CFA9 "demo5.asm"
+0 32 0 128 254 \ No newline at end of file
diff --git a/demo/demo5.asm b/demo/demo5.asm
new file mode 100644
index 0000000..9c3bc68
--- /dev/null
+++ b/demo/demo5.asm
@@ -0,0 +1,35 @@
+; Dissassebler
+; --------------------
+; [Main menu] -> [Tools] -> [Dissasseble]
+; Choose some hex file and see result
+
+; Custom commands
+; --------------------
+; They can be used for instance to load your program into a
+; real processor.
+; [Main menu] -> [Configure] -> [Edit cutom commands]
+; [Main menu] -> [Tools] -> [Cutom command N]
+
+; Tip of the day
+; --------------------
+; You may find some useful advices how to use this
+; IDE more efficiently
+; [Main menu] -> [Help] -> [Tip of the day]
+
+; Project web page:
+; --------------------
+; http://mcu8051ide.sf.net
+
+
+
+; AND NOW YOU ARE READY !
+; Click on [Main menu] -> [Project] -> [New] and create your own 8051 project ...
+
+
+; !!! HAVE A GOOD LUCK WITH THIS IDE !!!
+
+ org 0
+ sjmp $
+ end
+
+; !!! HAVE A GOOD LUCK WITH THIS IDE !!! \ No newline at end of file
diff --git a/demo/demo5.bin b/demo/demo5.bin
new file mode 100644
index 0000000..5416677
--- /dev/null
+++ b/demo/demo5.bin
@@ -0,0 +1 @@
+€ \ No newline at end of file
diff --git a/demo/demo5.hex b/demo/demo5.hex
new file mode 100644
index 0000000..0df57c5
--- /dev/null
+++ b/demo/demo5.hex
@@ -0,0 +1,2 @@
+:0200000080FE80
+:00000001FF \ No newline at end of file
diff --git a/demo/demo5.lst b/demo/demo5.lst
new file mode 100644
index 0000000..3468d65
--- /dev/null
+++ b/demo/demo5.lst
@@ -0,0 +1,216 @@
+demo5 PAGE 1
+ 1 ; Dissassebler
+ 2 ; --------------------
+ 3 ; [Main menu] -> [Tools] -> [Dissasseble]
+ 4 ; Choose some hex file and see result
+ 5
+ 6 ; Custom commands
+ 7 ; --------------------
+ 8 ; They can be used for instance to load your program into a
+ 9 ; real processor.
+ 10 ; [Main menu] -> [Configure] -> [Edit cutom commands]
+ 11 ; [Main menu] -> [Tools] -> [Cutom command N]
+ 12
+ 13 ; Tip of the day
+ 14 ; --------------------
+ 15 ; You may find some useful advices how to use this
+ 16 ; IDE more efficiently
+ 17 ; [Main menu] -> [Help] -> [Tip of the day]
+ 18
+ 19 ; Project web page:
+ 20 ; --------------------
+ 21 ; http://mcu8051ide.sf.net
+ 22
+ 23
+ 24
+ 25 ; AND NOW YOU ARE READY !
+ 26 ; Click on [Main menu] -> [Project] -> [New] and create your own 8051 project ...
+ 27
+ 28
+ 29 ; !!! HAVE A GOOD LUCK WITH THIS IDE !!!
+ 30
+ 31 org 0
+ 32 sjmp $
+ 33 end
+ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS
+
+
+SYMBOL TABLE:
+AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
+ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED
+ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED
+ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED
+ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED
+ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED
+ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED
+AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
+AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
+B. . . . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED
+BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED
+BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED
+CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED
+CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED
+CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED
+CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED
+CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED
+CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED
+CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED
+CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED
+CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED
+CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED
+CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED
+CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED
+CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED
+CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED
+CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED
+CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED
+CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED
+CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED
+CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED
+CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED
+CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED
+CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED
+CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
+CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED
+CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
+CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
+DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
+DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DPL. . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
+EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED
+EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
+ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
+ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
+ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
+ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED
+EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
+EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
+EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
+EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
+EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED
+EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED
+F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
+FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED
+IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
+IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
+INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
+INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
+IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED
+IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED
+IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
+IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
+KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED
+KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED
+KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
+P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
+P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
+P1 . . . . . . . . . . . . . . . . . D ADDR 0090H NOT USED
+P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED
+P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED
+P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
+P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H NOT USED
+P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED
+P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
+P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED
+P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED
+P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED
+PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
+PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED
+PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
+RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
+RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
+RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
+RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
+REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
+RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED
+RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
+RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED
+RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED
+RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
+SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED
+SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
+SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
+SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED
+SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
+SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
+SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED
+SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED
+SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED
+SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED
+T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
+T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
+T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
+T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
+TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
+TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
+TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
+TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
+TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
+TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
+TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
+TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
+TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
+TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
+TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED
+TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED
+TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED
+TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED
+TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
+TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
+TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED
+TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED
+TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
+TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
+TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
+WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
+WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED \ No newline at end of file
diff --git a/demo/demo5.sim b/demo/demo5.sim
new file mode 100644
index 0000000..7f2a49c
--- /dev/null
+++ b/demo/demo5.sim
@@ -0,0 +1,2 @@
+7D9DA265AF8276820125E7E130CFFF37 12/21/07 demo4.asm
+32 0 128 254 \ No newline at end of file
diff --git a/demo/demo_c_0 b/demo/demo_c_0
new file mode 100644
index 0000000..671d577
--- /dev/null
+++ b/demo/demo_c_0
Binary files differ
diff --git a/demo/demo_c_0.adb b/demo/demo_c_0.adb
new file mode 100644
index 0000000..30be84d
--- /dev/null
+++ b/demo/demo_c_0.adb
@@ -0,0 +1,106 @@
+M:demo_c_0
+F:G$someFunction$0$0({2}DF,SV:S),C,0,0,0,0,0
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+S:G$some_variable$0$0({4}SL:U),E,0,0
+S:G$i$0$0({2}SI:S),E,0,0
+S:LsomeFunction$somevalue$1$1({1}SC:U),R,0,0,[r2]
+S:G$P0$0$0({1}SC:U),I,0,0
+S:G$SP$0$0({1}SC:U),I,0,0
+S:G$DPL$0$0({1}SC:U),I,0,0
+S:G$DPH$0$0({1}SC:U),I,0,0
+S:G$PCON$0$0({1}SC:U),I,0,0
+S:G$TCON$0$0({1}SC:U),I,0,0
+S:G$TMOD$0$0({1}SC:U),I,0,0
+S:G$TL0$0$0({1}SC:U),I,0,0
+S:G$TL1$0$0({1}SC:U),I,0,0
+S:G$TH0$0$0({1}SC:U),I,0,0
+S:G$TH1$0$0({1}SC:U),I,0,0
+S:G$P1$0$0({1}SC:U),I,0,0
+S:G$SCON$0$0({1}SC:U),I,0,0
+S:G$SBUF$0$0({1}SC:U),I,0,0
+S:G$P2$0$0({1}SC:U),I,0,0
+S:G$IE$0$0({1}SC:U),I,0,0
+S:G$P3$0$0({1}SC:U),I,0,0
+S:G$IP$0$0({1}SC:U),I,0,0
+S:G$PSW$0$0({1}SC:U),I,0,0
+S:G$ACC$0$0({1}SC:U),I,0,0
+S:G$A$0$0({1}SC:U),I,0,0
+S:G$B$0$0({1}SC:U),I,0,0
+S:G$P0_0$0$0({1}SX:U),J,0,0
+S:G$P0_1$0$0({1}SX:U),J,0,0
+S:G$P0_2$0$0({1}SX:U),J,0,0
+S:G$P0_3$0$0({1}SX:U),J,0,0
+S:G$P0_4$0$0({1}SX:U),J,0,0
+S:G$P0_5$0$0({1}SX:U),J,0,0
+S:G$P0_6$0$0({1}SX:U),J,0,0
+S:G$P0_7$0$0({1}SX:U),J,0,0
+S:G$IT0$0$0({1}SX:U),J,0,0
+S:G$IE0$0$0({1}SX:U),J,0,0
+S:G$IT1$0$0({1}SX:U),J,0,0
+S:G$IE1$0$0({1}SX:U),J,0,0
+S:G$TR0$0$0({1}SX:U),J,0,0
+S:G$TF0$0$0({1}SX:U),J,0,0
+S:G$TR1$0$0({1}SX:U),J,0,0
+S:G$TF1$0$0({1}SX:U),J,0,0
+S:G$P1_0$0$0({1}SX:U),J,0,0
+S:G$P1_1$0$0({1}SX:U),J,0,0
+S:G$P1_2$0$0({1}SX:U),J,0,0
+S:G$P1_3$0$0({1}SX:U),J,0,0
+S:G$P1_4$0$0({1}SX:U),J,0,0
+S:G$P1_5$0$0({1}SX:U),J,0,0
+S:G$P1_6$0$0({1}SX:U),J,0,0
+S:G$P1_7$0$0({1}SX:U),J,0,0
+S:G$RI$0$0({1}SX:U),J,0,0
+S:G$TI$0$0({1}SX:U),J,0,0
+S:G$RB8$0$0({1}SX:U),J,0,0
+S:G$TB8$0$0({1}SX:U),J,0,0
+S:G$REN$0$0({1}SX:U),J,0,0
+S:G$SM2$0$0({1}SX:U),J,0,0
+S:G$SM1$0$0({1}SX:U),J,0,0
+S:G$SM0$0$0({1}SX:U),J,0,0
+S:G$P2_0$0$0({1}SX:U),J,0,0
+S:G$P2_1$0$0({1}SX:U),J,0,0
+S:G$P2_2$0$0({1}SX:U),J,0,0
+S:G$P2_3$0$0({1}SX:U),J,0,0
+S:G$P2_4$0$0({1}SX:U),J,0,0
+S:G$P2_5$0$0({1}SX:U),J,0,0
+S:G$P2_6$0$0({1}SX:U),J,0,0
+S:G$P2_7$0$0({1}SX:U),J,0,0
+S:G$EX0$0$0({1}SX:U),J,0,0
+S:G$ET0$0$0({1}SX:U),J,0,0
+S:G$EX1$0$0({1}SX:U),J,0,0
+S:G$ET1$0$0({1}SX:U),J,0,0
+S:G$ES$0$0({1}SX:U),J,0,0
+S:G$EA$0$0({1}SX:U),J,0,0
+S:G$P3_0$0$0({1}SX:U),J,0,0
+S:G$P3_1$0$0({1}SX:U),J,0,0
+S:G$P3_2$0$0({1}SX:U),J,0,0
+S:G$P3_3$0$0({1}SX:U),J,0,0
+S:G$P3_4$0$0({1}SX:U),J,0,0
+S:G$P3_5$0$0({1}SX:U),J,0,0
+S:G$P3_6$0$0({1}SX:U),J,0,0
+S:G$P3_7$0$0({1}SX:U),J,0,0
+S:G$RXD$0$0({1}SX:U),J,0,0
+S:G$TXD$0$0({1}SX:U),J,0,0
+S:G$INT0$0$0({1}SX:U),J,0,0
+S:G$INT1$0$0({1}SX:U),J,0,0
+S:G$T0$0$0({1}SX:U),J,0,0
+S:G$T1$0$0({1}SX:U),J,0,0
+S:G$WR$0$0({1}SX:U),J,0,0
+S:G$RD$0$0({1}SX:U),J,0,0
+S:G$PX0$0$0({1}SX:U),J,0,0
+S:G$PT0$0$0({1}SX:U),J,0,0
+S:G$PX1$0$0({1}SX:U),J,0,0
+S:G$PT1$0$0({1}SX:U),J,0,0
+S:G$PS$0$0({1}SX:U),J,0,0
+S:G$P$0$0({1}SX:U),J,0,0
+S:G$FL$0$0({1}SX:U),J,0,0
+S:G$OV$0$0({1}SX:U),J,0,0
+S:G$RS0$0$0({1}SX:U),J,0,0
+S:G$RS1$0$0({1}SX:U),J,0,0
+S:G$F0$0$0({1}SX:U),J,0,0
+S:G$AC$0$0({1}SX:U),J,0,0
+S:G$CY$0$0({1}SX:U),J,0,0
+S:G$someFunction$0$0({2}DF,SV:S),C,0,0
+S:G$main$0$0({2}DF,SI:S),C,0,0
diff --git a/demo/demo_c_0.asm b/demo/demo_c_0.asm
new file mode 100644
index 0000000..8338791
--- /dev/null
+++ b/demo/demo_c_0.asm
@@ -0,0 +1,529 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+; This file was generated Tue Oct 27 23:03:10 2009
+;--------------------------------------------------------
+ .module demo_c_0
+ .optsdcc -mmcs51 --model-small
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _main
+ .globl _someFunction
+ .globl _CY
+ .globl _AC
+ .globl _F0
+ .globl _RS1
+ .globl _RS0
+ .globl _OV
+ .globl _FL
+ .globl _P
+ .globl _PS
+ .globl _PT1
+ .globl _PX1
+ .globl _PT0
+ .globl _PX0
+ .globl _RD
+ .globl _WR
+ .globl _T1
+ .globl _T0
+ .globl _INT1
+ .globl _INT0
+ .globl _TXD
+ .globl _RXD
+ .globl _P3_7
+ .globl _P3_6
+ .globl _P3_5
+ .globl _P3_4
+ .globl _P3_3
+ .globl _P3_2
+ .globl _P3_1
+ .globl _P3_0
+ .globl _EA
+ .globl _ES
+ .globl _ET1
+ .globl _EX1
+ .globl _ET0
+ .globl _EX0
+ .globl _P2_7
+ .globl _P2_6
+ .globl _P2_5
+ .globl _P2_4
+ .globl _P2_3
+ .globl _P2_2
+ .globl _P2_1
+ .globl _P2_0
+ .globl _SM0
+ .globl _SM1
+ .globl _SM2
+ .globl _REN
+ .globl _TB8
+ .globl _RB8
+ .globl _TI
+ .globl _RI
+ .globl _P1_7
+ .globl _P1_6
+ .globl _P1_5
+ .globl _P1_4
+ .globl _P1_3
+ .globl _P1_2
+ .globl _P1_1
+ .globl _P1_0
+ .globl _TF1
+ .globl _TR1
+ .globl _TF0
+ .globl _TR0
+ .globl _IE1
+ .globl _IT1
+ .globl _IE0
+ .globl _IT0
+ .globl _P0_7
+ .globl _P0_6
+ .globl _P0_5
+ .globl _P0_4
+ .globl _P0_3
+ .globl _P0_2
+ .globl _P0_1
+ .globl _P0_0
+ .globl _B
+ .globl _A
+ .globl _ACC
+ .globl _PSW
+ .globl _IP
+ .globl _P3
+ .globl _IE
+ .globl _P2
+ .globl _SBUF
+ .globl _SCON
+ .globl _P1
+ .globl _TH1
+ .globl _TH0
+ .globl _TL1
+ .globl _TL0
+ .globl _TMOD
+ .globl _TCON
+ .globl _PCON
+ .globl _DPH
+ .globl _DPL
+ .globl _SP
+ .globl _P0
+ .globl _i
+ .globl _some_variable
+;--------------------------------------------------------
+; special function registers
+;--------------------------------------------------------
+ .area RSEG (DATA)
+G$P0$0$0 == 0x0080
+_P0 = 0x0080
+G$SP$0$0 == 0x0081
+_SP = 0x0081
+G$DPL$0$0 == 0x0082
+_DPL = 0x0082
+G$DPH$0$0 == 0x0083
+_DPH = 0x0083
+G$PCON$0$0 == 0x0087
+_PCON = 0x0087
+G$TCON$0$0 == 0x0088
+_TCON = 0x0088
+G$TMOD$0$0 == 0x0089
+_TMOD = 0x0089
+G$TL0$0$0 == 0x008a
+_TL0 = 0x008a
+G$TL1$0$0 == 0x008b
+_TL1 = 0x008b
+G$TH0$0$0 == 0x008c
+_TH0 = 0x008c
+G$TH1$0$0 == 0x008d
+_TH1 = 0x008d
+G$P1$0$0 == 0x0090
+_P1 = 0x0090
+G$SCON$0$0 == 0x0098
+_SCON = 0x0098
+G$SBUF$0$0 == 0x0099
+_SBUF = 0x0099
+G$P2$0$0 == 0x00a0
+_P2 = 0x00a0
+G$IE$0$0 == 0x00a8
+_IE = 0x00a8
+G$P3$0$0 == 0x00b0
+_P3 = 0x00b0
+G$IP$0$0 == 0x00b8
+_IP = 0x00b8
+G$PSW$0$0 == 0x00d0
+_PSW = 0x00d0
+G$ACC$0$0 == 0x00e0
+_ACC = 0x00e0
+G$A$0$0 == 0x00e0
+_A = 0x00e0
+G$B$0$0 == 0x00f0
+_B = 0x00f0
+;--------------------------------------------------------
+; special function bits
+;--------------------------------------------------------
+ .area RSEG (DATA)
+G$P0_0$0$0 == 0x0080
+_P0_0 = 0x0080
+G$P0_1$0$0 == 0x0081
+_P0_1 = 0x0081
+G$P0_2$0$0 == 0x0082
+_P0_2 = 0x0082
+G$P0_3$0$0 == 0x0083
+_P0_3 = 0x0083
+G$P0_4$0$0 == 0x0084
+_P0_4 = 0x0084
+G$P0_5$0$0 == 0x0085
+_P0_5 = 0x0085
+G$P0_6$0$0 == 0x0086
+_P0_6 = 0x0086
+G$P0_7$0$0 == 0x0087
+_P0_7 = 0x0087
+G$IT0$0$0 == 0x0088
+_IT0 = 0x0088
+G$IE0$0$0 == 0x0089
+_IE0 = 0x0089
+G$IT1$0$0 == 0x008a
+_IT1 = 0x008a
+G$IE1$0$0 == 0x008b
+_IE1 = 0x008b
+G$TR0$0$0 == 0x008c
+_TR0 = 0x008c
+G$TF0$0$0 == 0x008d
+_TF0 = 0x008d
+G$TR1$0$0 == 0x008e
+_TR1 = 0x008e
+G$TF1$0$0 == 0x008f
+_TF1 = 0x008f
+G$P1_0$0$0 == 0x0090
+_P1_0 = 0x0090
+G$P1_1$0$0 == 0x0091
+_P1_1 = 0x0091
+G$P1_2$0$0 == 0x0092
+_P1_2 = 0x0092
+G$P1_3$0$0 == 0x0093
+_P1_3 = 0x0093
+G$P1_4$0$0 == 0x0094
+_P1_4 = 0x0094
+G$P1_5$0$0 == 0x0095
+_P1_5 = 0x0095
+G$P1_6$0$0 == 0x0096
+_P1_6 = 0x0096
+G$P1_7$0$0 == 0x0097
+_P1_7 = 0x0097
+G$RI$0$0 == 0x0098
+_RI = 0x0098
+G$TI$0$0 == 0x0099
+_TI = 0x0099
+G$RB8$0$0 == 0x009a
+_RB8 = 0x009a
+G$TB8$0$0 == 0x009b
+_TB8 = 0x009b
+G$REN$0$0 == 0x009c
+_REN = 0x009c
+G$SM2$0$0 == 0x009d
+_SM2 = 0x009d
+G$SM1$0$0 == 0x009e
+_SM1 = 0x009e
+G$SM0$0$0 == 0x009f
+_SM0 = 0x009f
+G$P2_0$0$0 == 0x00a0
+_P2_0 = 0x00a0
+G$P2_1$0$0 == 0x00a1
+_P2_1 = 0x00a1
+G$P2_2$0$0 == 0x00a2
+_P2_2 = 0x00a2
+G$P2_3$0$0 == 0x00a3
+_P2_3 = 0x00a3
+G$P2_4$0$0 == 0x00a4
+_P2_4 = 0x00a4
+G$P2_5$0$0 == 0x00a5
+_P2_5 = 0x00a5
+G$P2_6$0$0 == 0x00a6
+_P2_6 = 0x00a6
+G$P2_7$0$0 == 0x00a7
+_P2_7 = 0x00a7
+G$EX0$0$0 == 0x00a8
+_EX0 = 0x00a8
+G$ET0$0$0 == 0x00a9
+_ET0 = 0x00a9
+G$EX1$0$0 == 0x00aa
+_EX1 = 0x00aa
+G$ET1$0$0 == 0x00ab
+_ET1 = 0x00ab
+G$ES$0$0 == 0x00ac
+_ES = 0x00ac
+G$EA$0$0 == 0x00af
+_EA = 0x00af
+G$P3_0$0$0 == 0x00b0
+_P3_0 = 0x00b0
+G$P3_1$0$0 == 0x00b1
+_P3_1 = 0x00b1
+G$P3_2$0$0 == 0x00b2
+_P3_2 = 0x00b2
+G$P3_3$0$0 == 0x00b3
+_P3_3 = 0x00b3
+G$P3_4$0$0 == 0x00b4
+_P3_4 = 0x00b4
+G$P3_5$0$0 == 0x00b5
+_P3_5 = 0x00b5
+G$P3_6$0$0 == 0x00b6
+_P3_6 = 0x00b6
+G$P3_7$0$0 == 0x00b7
+_P3_7 = 0x00b7
+G$RXD$0$0 == 0x00b0
+_RXD = 0x00b0
+G$TXD$0$0 == 0x00b1
+_TXD = 0x00b1
+G$INT0$0$0 == 0x00b2
+_INT0 = 0x00b2
+G$INT1$0$0 == 0x00b3
+_INT1 = 0x00b3
+G$T0$0$0 == 0x00b4
+_T0 = 0x00b4
+G$T1$0$0 == 0x00b5
+_T1 = 0x00b5
+G$WR$0$0 == 0x00b6
+_WR = 0x00b6
+G$RD$0$0 == 0x00b7
+_RD = 0x00b7
+G$PX0$0$0 == 0x00b8
+_PX0 = 0x00b8
+G$PT0$0$0 == 0x00b9
+_PT0 = 0x00b9
+G$PX1$0$0 == 0x00ba
+_PX1 = 0x00ba
+G$PT1$0$0 == 0x00bb
+_PT1 = 0x00bb
+G$PS$0$0 == 0x00bc
+_PS = 0x00bc
+G$P$0$0 == 0x00d0
+_P = 0x00d0
+G$FL$0$0 == 0x00d1
+_FL = 0x00d1
+G$OV$0$0 == 0x00d2
+_OV = 0x00d2
+G$RS0$0$0 == 0x00d3
+_RS0 = 0x00d3
+G$RS1$0$0 == 0x00d4
+_RS1 = 0x00d4
+G$F0$0$0 == 0x00d5
+_F0 = 0x00d5
+G$AC$0$0 == 0x00d6
+_AC = 0x00d6
+G$CY$0$0 == 0x00d7
+_CY = 0x00d7
+;--------------------------------------------------------
+; overlayable register banks
+;--------------------------------------------------------
+ .area REG_BANK_0 (REL,OVR,DATA)
+ .ds 8
+;--------------------------------------------------------
+; internal ram data
+;--------------------------------------------------------
+ .area DSEG (DATA)
+G$some_variable$0$0==.
+_some_variable::
+ .ds 4
+G$i$0$0==.
+_i::
+ .ds 2
+;--------------------------------------------------------
+; overlayable items in internal ram
+;--------------------------------------------------------
+ .area OSEG (OVR,DATA)
+;--------------------------------------------------------
+; Stack segment in internal ram
+;--------------------------------------------------------
+ .area SSEG (DATA)
+__start__stack:
+ .ds 1
+
+;--------------------------------------------------------
+; indirectly addressable internal ram data
+;--------------------------------------------------------
+ .area ISEG (DATA)
+;--------------------------------------------------------
+; absolute internal ram data
+;--------------------------------------------------------
+ .area IABS (ABS,DATA)
+ .area IABS (ABS,DATA)
+;--------------------------------------------------------
+; bit data
+;--------------------------------------------------------
+ .area BSEG (BIT)
+;--------------------------------------------------------
+; paged external ram data
+;--------------------------------------------------------
+ .area PSEG (PAG,XDATA)
+;--------------------------------------------------------
+; external ram data
+;--------------------------------------------------------
+ .area XSEG (XDATA)
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area XABS (ABS,XDATA)
+;--------------------------------------------------------
+; external initialized ram data
+;--------------------------------------------------------
+ .area XISEG (XDATA)
+ .area HOME (CODE)
+ .area GSINIT0 (CODE)
+ .area GSINIT1 (CODE)
+ .area GSINIT2 (CODE)
+ .area GSINIT3 (CODE)
+ .area GSINIT4 (CODE)
+ .area GSINIT5 (CODE)
+ .area GSINIT (CODE)
+ .area GSFINAL (CODE)
+ .area CSEG (CODE)
+;--------------------------------------------------------
+; interrupt vector
+;--------------------------------------------------------
+ .area HOME (CODE)
+__interrupt_vect:
+ ljmp __sdcc_gsinit_startup
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME (CODE)
+ .area GSINIT (CODE)
+ .area GSFINAL (CODE)
+ .area GSINIT (CODE)
+ .globl __sdcc_gsinit_startup
+ .globl __sdcc_program_startup
+ .globl __start__stack
+ .globl __mcs51_genXINIT
+ .globl __mcs51_genXRAMCLEAR
+ .globl __mcs51_genRAMCLEAR
+ G$main$0$0 ==.
+ C$demo_c_0.c$10$1$1 ==.
+; demo_c_0.c:10: unsigned long some_variable=0; ///< Documentation for this variable comes here
+ clr a
+ mov _some_variable,a
+ mov (_some_variable + 1),a
+ mov (_some_variable + 2),a
+ mov (_some_variable + 3),a
+ .area GSFINAL (CODE)
+ ljmp __sdcc_program_startup
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME (CODE)
+ .area HOME (CODE)
+__sdcc_program_startup:
+ lcall _main
+; return from main will lock up
+ sjmp .
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CSEG (CODE)
+;------------------------------------------------------------
+;Allocation info for local variables in function 'someFunction'
+;------------------------------------------------------------
+;somevalue Allocated to registers r2
+;------------------------------------------------------------
+ G$someFunction$0$0 ==.
+ C$demo_c_0.c$20$0$0 ==.
+; demo_c_0.c:20: void someFunction(unsigned char somevalue)
+; -----------------------------------------
+; function someFunction
+; -----------------------------------------
+_someFunction:
+ ar2 = 0x02
+ ar3 = 0x03
+ ar4 = 0x04
+ ar5 = 0x05
+ ar6 = 0x06
+ ar7 = 0x07
+ ar0 = 0x00
+ ar1 = 0x01
+ mov r2,dpl
+ C$demo_c_0.c$23$1$1 ==.
+; demo_c_0.c:23: P1=somevalue;
+ mov _P1,r2
+ C$demo_c_0.c$24$1$1 ==.
+; demo_c_0.c:24: P3=somevalue^0xFF;
+ mov a,#0xFF
+ xrl a,r2
+ mov _P3,a
+ C$demo_c_0.c$25$1$1 ==.
+ XG$someFunction$0$0 ==.
+ ret
+;------------------------------------------------------------
+;Allocation info for local variables in function 'main'
+;------------------------------------------------------------
+;------------------------------------------------------------
+ G$main$0$0 ==.
+ C$demo_c_0.c$28$1$1 ==.
+; demo_c_0.c:28: int main()
+; -----------------------------------------
+; function main
+; -----------------------------------------
+_main:
+ C$demo_c_0.c$31$1$1 ==.
+; demo_c_0.c:31: while(1) {
+00102$:
+ C$demo_c_0.c$32$2$2 ==.
+; demo_c_0.c:32: for(i=0; i<255; i++) {
+ clr a
+ mov _i,a
+ mov (_i + 1),a
+00104$:
+ clr c
+ mov a,_i
+ subb a,#0xFF
+ mov a,(_i + 1)
+ xrl a,#0x80
+ subb a,#0x80
+ jnc 00107$
+ C$demo_c_0.c$33$3$3 ==.
+; demo_c_0.c:33: someFunction(i+2);
+ mov r2,_i
+ mov a,#0x02
+ add a,r2
+ mov dpl,a
+ lcall _someFunction
+ C$demo_c_0.c$34$3$3 ==.
+; demo_c_0.c:34: some_variable++;
+ inc _some_variable
+ clr a
+ cjne a,_some_variable,00114$
+ inc (_some_variable + 1)
+ cjne a,(_some_variable + 1),00114$
+ inc (_some_variable + 2)
+ cjne a,(_some_variable + 2),00114$
+ inc (_some_variable + 3)
+00114$:
+ C$demo_c_0.c$32$2$2 ==.
+; demo_c_0.c:32: for(i=0; i<255; i++) {
+ inc _i
+ clr a
+ cjne a,_i,00104$
+ inc (_i + 1)
+ sjmp 00104$
+00107$:
+ C$demo_c_0.c$36$2$2 ==.
+; demo_c_0.c:36: some_variable-=22;
+ mov a,_some_variable
+ add a,#0xea
+ mov _some_variable,a
+ mov a,(_some_variable + 1)
+ addc a,#0xff
+ mov (_some_variable + 1),a
+ mov a,(_some_variable + 2)
+ addc a,#0xff
+ mov (_some_variable + 2),a
+ mov a,(_some_variable + 3)
+ addc a,#0xff
+ mov (_some_variable + 3),a
+ C$demo_c_0.c$40$1$1 ==.
+; demo_c_0.c:40: return 0;
+ C$demo_c_0.c$41$1$1 ==.
+ XG$main$0$0 ==.
+ sjmp 00102$
+ .area CSEG (CODE)
+ .area CONST (CODE)
+ .area XINIT (CODE)
+ .area CABS (ABS,CODE)
diff --git a/demo/demo_c_0.c b/demo/demo_c_0.c
new file mode 100644
index 0000000..9655334
--- /dev/null
+++ b/demo/demo_c_0.c
@@ -0,0 +1,41 @@
+/**
+ * Very very simple demonstration code written in C language
+ * @file demo_c_0.c
+ */
+
+// This file defines registers avaliable in AT89x51 MCUs
+// See /usr/share/sdcc/include/mcs51/ for alternatives
+#include <at89x51.h>
+
+unsigned long some_variable=0; ///< Documentation for this variable comes here
+int i; ///< General purpose interator
+
+/**
+ * These lines are a doxygen documentation for this function
+ * See doxygen manual for more details (http://www.stack.nl/~dimitri/doxygen/manual.html)
+ * Note: Try to click on the 1st line of the function declaration and then press Ctrl+E
+ * <b style="color: #FF0000">Some bold text</b>
+ * @param somevalue Some agrument
+ */
+void someFunction(unsigned char somevalue)
+{
+ // P1 and P3 are variables defined in "at89x51.h"
+ P1=somevalue;
+ P3=somevalue^0xFF;
+}
+
+/** Main loop */
+int main()
+{
+ // Infinite loop
+ while(1) {
+ for(i=0; i<255; i++) {
+ someFunction(i+2);
+ some_variable++;
+ }
+ some_variable-=22;
+ }
+
+ // Report success
+ return 0;
+}
diff --git a/demo/demo_c_0.cdb b/demo/demo_c_0.cdb
new file mode 100644
index 0000000..8886635
--- /dev/null
+++ b/demo/demo_c_0.cdb
@@ -0,0 +1,278 @@
+M:demo_c_0
+F:G$someFunction$0$0({2}DF,SV:S),C,0,0,0,0,0
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+S:G$some_variable$0$0({4}SL:U),E,0,0
+S:G$i$0$0({2}SI:S),E,0,0
+S:LsomeFunction$somevalue$1$1({1}SC:U),R,0,0,[r2]
+S:G$P0$0$0({1}SC:U),I,0,0
+S:G$SP$0$0({1}SC:U),I,0,0
+S:G$DPL$0$0({1}SC:U),I,0,0
+S:G$DPH$0$0({1}SC:U),I,0,0
+S:G$PCON$0$0({1}SC:U),I,0,0
+S:G$TCON$0$0({1}SC:U),I,0,0
+S:G$TMOD$0$0({1}SC:U),I,0,0
+S:G$TL0$0$0({1}SC:U),I,0,0
+S:G$TL1$0$0({1}SC:U),I,0,0
+S:G$TH0$0$0({1}SC:U),I,0,0
+S:G$TH1$0$0({1}SC:U),I,0,0
+S:G$P1$0$0({1}SC:U),I,0,0
+S:G$SCON$0$0({1}SC:U),I,0,0
+S:G$SBUF$0$0({1}SC:U),I,0,0
+S:G$P2$0$0({1}SC:U),I,0,0
+S:G$IE$0$0({1}SC:U),I,0,0
+S:G$P3$0$0({1}SC:U),I,0,0
+S:G$IP$0$0({1}SC:U),I,0,0
+S:G$PSW$0$0({1}SC:U),I,0,0
+S:G$ACC$0$0({1}SC:U),I,0,0
+S:G$A$0$0({1}SC:U),I,0,0
+S:G$B$0$0({1}SC:U),I,0,0
+S:G$P0_0$0$0({1}SX:U),J,0,0
+S:G$P0_1$0$0({1}SX:U),J,0,0
+S:G$P0_2$0$0({1}SX:U),J,0,0
+S:G$P0_3$0$0({1}SX:U),J,0,0
+S:G$P0_4$0$0({1}SX:U),J,0,0
+S:G$P0_5$0$0({1}SX:U),J,0,0
+S:G$P0_6$0$0({1}SX:U),J,0,0
+S:G$P0_7$0$0({1}SX:U),J,0,0
+S:G$IT0$0$0({1}SX:U),J,0,0
+S:G$IE0$0$0({1}SX:U),J,0,0
+S:G$IT1$0$0({1}SX:U),J,0,0
+S:G$IE1$0$0({1}SX:U),J,0,0
+S:G$TR0$0$0({1}SX:U),J,0,0
+S:G$TF0$0$0({1}SX:U),J,0,0
+S:G$TR1$0$0({1}SX:U),J,0,0
+S:G$TF1$0$0({1}SX:U),J,0,0
+S:G$P1_0$0$0({1}SX:U),J,0,0
+S:G$P1_1$0$0({1}SX:U),J,0,0
+S:G$P1_2$0$0({1}SX:U),J,0,0
+S:G$P1_3$0$0({1}SX:U),J,0,0
+S:G$P1_4$0$0({1}SX:U),J,0,0
+S:G$P1_5$0$0({1}SX:U),J,0,0
+S:G$P1_6$0$0({1}SX:U),J,0,0
+S:G$P1_7$0$0({1}SX:U),J,0,0
+S:G$RI$0$0({1}SX:U),J,0,0
+S:G$TI$0$0({1}SX:U),J,0,0
+S:G$RB8$0$0({1}SX:U),J,0,0
+S:G$TB8$0$0({1}SX:U),J,0,0
+S:G$REN$0$0({1}SX:U),J,0,0
+S:G$SM2$0$0({1}SX:U),J,0,0
+S:G$SM1$0$0({1}SX:U),J,0,0
+S:G$SM0$0$0({1}SX:U),J,0,0
+S:G$P2_0$0$0({1}SX:U),J,0,0
+S:G$P2_1$0$0({1}SX:U),J,0,0
+S:G$P2_2$0$0({1}SX:U),J,0,0
+S:G$P2_3$0$0({1}SX:U),J,0,0
+S:G$P2_4$0$0({1}SX:U),J,0,0
+S:G$P2_5$0$0({1}SX:U),J,0,0
+S:G$P2_6$0$0({1}SX:U),J,0,0
+S:G$P2_7$0$0({1}SX:U),J,0,0
+S:G$EX0$0$0({1}SX:U),J,0,0
+S:G$ET0$0$0({1}SX:U),J,0,0
+S:G$EX1$0$0({1}SX:U),J,0,0
+S:G$ET1$0$0({1}SX:U),J,0,0
+S:G$ES$0$0({1}SX:U),J,0,0
+S:G$EA$0$0({1}SX:U),J,0,0
+S:G$P3_0$0$0({1}SX:U),J,0,0
+S:G$P3_1$0$0({1}SX:U),J,0,0
+S:G$P3_2$0$0({1}SX:U),J,0,0
+S:G$P3_3$0$0({1}SX:U),J,0,0
+S:G$P3_4$0$0({1}SX:U),J,0,0
+S:G$P3_5$0$0({1}SX:U),J,0,0
+S:G$P3_6$0$0({1}SX:U),J,0,0
+S:G$P3_7$0$0({1}SX:U),J,0,0
+S:G$RXD$0$0({1}SX:U),J,0,0
+S:G$TXD$0$0({1}SX:U),J,0,0
+S:G$INT0$0$0({1}SX:U),J,0,0
+S:G$INT1$0$0({1}SX:U),J,0,0
+S:G$T0$0$0({1}SX:U),J,0,0
+S:G$T1$0$0({1}SX:U),J,0,0
+S:G$WR$0$0({1}SX:U),J,0,0
+S:G$RD$0$0({1}SX:U),J,0,0
+S:G$PX0$0$0({1}SX:U),J,0,0
+S:G$PT0$0$0({1}SX:U),J,0,0
+S:G$PX1$0$0({1}SX:U),J,0,0
+S:G$PT1$0$0({1}SX:U),J,0,0
+S:G$PS$0$0({1}SX:U),J,0,0
+S:G$P$0$0({1}SX:U),J,0,0
+S:G$FL$0$0({1}SX:U),J,0,0
+S:G$OV$0$0({1}SX:U),J,0,0
+S:G$RS0$0$0({1}SX:U),J,0,0
+S:G$RS1$0$0({1}SX:U),J,0,0
+S:G$F0$0$0({1}SX:U),J,0,0
+S:G$AC$0$0({1}SX:U),J,0,0
+S:G$CY$0$0({1}SX:U),J,0,0
+S:G$someFunction$0$0({2}DF,SV:S),C,0,0
+S:G$main$0$0({2}DF,SI:S),C,0,0
+L:G$P0$0$0:80
+L:G$P0_0$0$0:80
+L:G$P0_1$0$0:81
+L:G$SP$0$0:81
+L:G$DPL$0$0:82
+L:G$P0_2$0$0:82
+L:G$DPH$0$0:83
+L:G$P0_3$0$0:83
+L:G$P0_4$0$0:84
+L:G$P0_5$0$0:85
+L:G$P0_6$0$0:86
+L:G$P0_7$0$0:87
+L:G$PCON$0$0:87
+L:G$IT0$0$0:88
+L:G$TCON$0$0:88
+L:G$IE0$0$0:89
+L:G$TMOD$0$0:89
+L:G$IT1$0$0:8A
+L:G$TL0$0$0:8A
+L:G$IE1$0$0:8B
+L:G$TL1$0$0:8B
+L:G$TH0$0$0:8C
+L:G$TR0$0$0:8C
+L:G$TF0$0$0:8D
+L:G$TH1$0$0:8D
+L:G$TR1$0$0:8E
+L:G$TF1$0$0:8F
+L:G$P1$0$0:90
+L:G$P1_0$0$0:90
+L:G$P1_1$0$0:91
+L:G$P1_2$0$0:92
+L:G$P1_3$0$0:93
+L:G$P1_4$0$0:94
+L:G$P1_5$0$0:95
+L:G$P1_6$0$0:96
+L:G$P1_7$0$0:97
+L:G$RI$0$0:98
+L:G$SCON$0$0:98
+L:G$SBUF$0$0:99
+L:G$TI$0$0:99
+L:G$RB8$0$0:9A
+L:G$TB8$0$0:9B
+L:G$REN$0$0:9C
+L:G$SM2$0$0:9D
+L:G$SM1$0$0:9E
+L:G$SM0$0$0:9F
+L:G$P2$0$0:A0
+L:G$P2_0$0$0:A0
+L:G$P2_1$0$0:A1
+L:G$P2_2$0$0:A2
+L:G$P2_3$0$0:A3
+L:G$P2_4$0$0:A4
+L:G$P2_5$0$0:A5
+L:G$P2_6$0$0:A6
+L:G$P2_7$0$0:A7
+L:G$EX0$0$0:A8
+L:G$IE$0$0:A8
+L:G$ET0$0$0:A9
+L:G$EX1$0$0:AA
+L:G$ET1$0$0:AB
+L:G$ES$0$0:AC
+L:G$EA$0$0:AF
+L:G$P3$0$0:B0
+L:G$P3_0$0$0:B0
+L:G$RXD$0$0:B0
+L:G$P3_1$0$0:B1
+L:G$TXD$0$0:B1
+L:G$INT0$0$0:B2
+L:G$P3_2$0$0:B2
+L:G$INT1$0$0:B3
+L:G$P3_3$0$0:B3
+L:G$P3_4$0$0:B4
+L:G$T0$0$0:B4
+L:G$P3_5$0$0:B5
+L:G$T1$0$0:B5
+L:G$P3_6$0$0:B6
+L:G$WR$0$0:B6
+L:G$P3_7$0$0:B7
+L:G$RD$0$0:B7
+L:G$IP$0$0:B8
+L:G$PX0$0$0:B8
+L:G$PT0$0$0:B9
+L:G$PX1$0$0:BA
+L:G$PT1$0$0:BB
+L:G$PS$0$0:BC
+L:G$P$0$0:D0
+L:G$PSW$0$0:D0
+L:G$FL$0$0:D1
+L:G$OV$0$0:D2
+L:G$RS0$0$0:D3
+L:G$RS1$0$0:D4
+L:G$F0$0$0:D5
+L:G$AC$0$0:D6
+L:G$CY$0$0:D7
+L:G$A$0$0:E0
+L:G$ACC$0$0:E0
+L:G$B$0$0:F0
+L:G$some_variable$0$0:8
+L:G$i$0$0:C
+L:A$demo_c_0$385:0
+L:A$demo_c_0$415:3
+L:A$demo_c_0$417:6
+L:A$demo_c_0$402:61
+L:C$demo_c_0.c$10$1$1:61
+L:A$demo_c_0$403:62
+L:A$demo_c_0$404:64
+L:A$demo_c_0$405:66
+L:A$demo_c_0$406:68
+L:A$demo_c_0$408:6A
+L:A$demo_c_0$442:6D
+L:C$demo_c_0.c$20$0$0:6D
+L:G$someFunction$0$0:6D
+L:A$demo_c_0$445:6F
+L:C$demo_c_0.c$23$1$1:6F
+L:A$demo_c_0$448:71
+L:C$demo_c_0.c$24$1$1:71
+L:A$demo_c_0$449:73
+L:A$demo_c_0$450:74
+L:A$demo_c_0$453:76
+L:C$demo_c_0.c$25$1$1:76
+L:XG$someFunction$0$0:76
+L:A$demo_c_0$470:77
+L:C$demo_c_0.c$28$1$1:77
+L:C$demo_c_0.c$31$1$1:77
+L:G$main$0$0:77
+L:A$demo_c_0$471:78
+L:A$demo_c_0$472:7A
+L:A$demo_c_0$474:7C
+L:A$demo_c_0$475:7D
+L:A$demo_c_0$476:7F
+L:A$demo_c_0$477:81
+L:A$demo_c_0$478:83
+L:A$demo_c_0$479:85
+L:A$demo_c_0$480:87
+L:A$demo_c_0$483:89
+L:C$demo_c_0.c$33$3$3:89
+L:A$demo_c_0$484:8B
+L:A$demo_c_0$485:8D
+L:A$demo_c_0$486:8E
+L:A$demo_c_0$487:90
+L:A$demo_c_0$490:93
+L:C$demo_c_0.c$34$3$3:93
+L:A$demo_c_0$491:95
+L:A$demo_c_0$492:96
+L:A$demo_c_0$493:99
+L:A$demo_c_0$494:9B
+L:A$demo_c_0$495:9E
+L:A$demo_c_0$496:A0
+L:A$demo_c_0$497:A3
+L:A$demo_c_0$501:A5
+L:C$demo_c_0.c$32$2$2:A5
+L:A$demo_c_0$502:A7
+L:A$demo_c_0$503:A8
+L:A$demo_c_0$504:AB
+L:A$demo_c_0$505:AD
+L:A$demo_c_0$509:AF
+L:C$demo_c_0.c$36$2$2:AF
+L:A$demo_c_0$510:B1
+L:A$demo_c_0$511:B3
+L:A$demo_c_0$512:B5
+L:A$demo_c_0$513:B7
+L:A$demo_c_0$514:B9
+L:A$demo_c_0$515:BB
+L:A$demo_c_0$516:BD
+L:A$demo_c_0$517:BF
+L:A$demo_c_0$518:C1
+L:A$demo_c_0$519:C3
+L:A$demo_c_0$520:C5
+L:A$demo_c_0$525:C7
+L:C$demo_c_0.c$40$1$1:C7
+L:C$demo_c_0.c$41$1$1:C7
+L:XG$main$0$0:C7
diff --git a/demo/demo_c_0.hashes b/demo/demo_c_0.hashes
new file mode 100644
index 0000000..aa19cb5
--- /dev/null
+++ b/demo/demo_c_0.hashes
@@ -0,0 +1 @@
+79C98C5ADE29831807D59F6BC438063A "demo_c_0.c"
diff --git a/demo/demo_c_0.hex b/demo/demo_c_0.hex
new file mode 100644
index 0000000..6160cd7
--- /dev/null
+++ b/demo/demo_c_0.hex
@@ -0,0 +1,34 @@
+:03000000020008F3
+:06006100E4F508F509F5C5
+:030067000AF50B8C
+:03006A000200038E
+:0500030012007780FEF1
+:0A006D00AA828A9074FF6AF5B0229F
+:05007700E4F50CF50D9D
+:0A007C00C3E50C94FFE50D648094C9
+:0B008600805026AA0C74022AF582129A
+:06009100006D0508E4B556
+:05009700080C0509B58D
+:05009C000907050AB58B
+:0400A1000A02050B3F
+:0700A500050CE4B50CD105C8
+:0300AC000D80CDF7
+:0700AF00E50824EAF508E56D
+:0600B6000934FFF509E525
+:0600BC000A34FFF50AE51D
+:0700C2000B34FFF50B80AECB
+:06003700E478FFF6D8FD9D
+:080015007900E94400601B7A48
+:05001D00009000CD7809
+:030022000075A0C6
+:0A00250000E493F2A308B8000205FE
+:08002F00A0D9F4DAF275A0FF7C
+:08003D007800E84400600A7934
+:030045000075A0A3
+:0600480000E4F309D8FCFE
+:08004E007800E84400600C7921
+:0B00560000900000E4F0A3D8FCD9FAF1
+:0300080075810DF2
+:0A000B001200C9E582600302000341
+:0400C900758200221A
+:00000001FF
diff --git a/demo/demo_c_0.ihx b/demo/demo_c_0.ihx
new file mode 100644
index 0000000..6160cd7
--- /dev/null
+++ b/demo/demo_c_0.ihx
@@ -0,0 +1,34 @@
+:03000000020008F3
+:06006100E4F508F509F5C5
+:030067000AF50B8C
+:03006A000200038E
+:0500030012007780FEF1
+:0A006D00AA828A9074FF6AF5B0229F
+:05007700E4F50CF50D9D
+:0A007C00C3E50C94FFE50D648094C9
+:0B008600805026AA0C74022AF582129A
+:06009100006D0508E4B556
+:05009700080C0509B58D
+:05009C000907050AB58B
+:0400A1000A02050B3F
+:0700A500050CE4B50CD105C8
+:0300AC000D80CDF7
+:0700AF00E50824EAF508E56D
+:0600B6000934FFF509E525
+:0600BC000A34FFF50AE51D
+:0700C2000B34FFF50B80AECB
+:06003700E478FFF6D8FD9D
+:080015007900E94400601B7A48
+:05001D00009000CD7809
+:030022000075A0C6
+:0A00250000E493F2A308B8000205FE
+:08002F00A0D9F4DAF275A0FF7C
+:08003D007800E84400600A7934
+:030045000075A0A3
+:0600480000E4F309D8FCFE
+:08004E007800E84400600C7921
+:0B00560000900000E4F0A3D8FCD9FAF1
+:0300080075810DF2
+:0A000B001200C9E582600302000341
+:0400C900758200221A
+:00000001FF
diff --git a/demo/demo_c_0.lnk b/demo/demo_c_0.lnk
new file mode 100644
index 0000000..4e51a94
--- /dev/null
+++ b/demo/demo_c_0.lnk
@@ -0,0 +1,19 @@
+-myuxi
+-Y
+-a 0x0100
+-v 0x0000
+-w 0x0800
+-z
+-b HOME = 0x0000
+-b ISEG = 0x0000
+-b BSEG = 0x0000
+-k /usr/libexec/sdcc/../share/sdcc/lib/small
+-k /usr/share/sdcc/lib/small
+-l mcs51
+-l libsdcc
+-l libint
+-l liblong
+-l libfloat
+demo_c_0.rel
+
+-e
diff --git a/demo/demo_c_0.lst b/demo/demo_c_0.lst
new file mode 100644
index 0000000..ec4c901
--- /dev/null
+++ b/demo/demo_c_0.lst
@@ -0,0 +1,529 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+ 4 ; This file was generated Tue Oct 27 23:03:10 2009
+ 5 ;--------------------------------------------------------
+ 6 .module demo_c_0
+ 7 .optsdcc -mmcs51 --model-small
+ 8
+ 9 ;--------------------------------------------------------
+ 10 ; Public variables in this module
+ 11 ;--------------------------------------------------------
+ 12 .globl _main
+ 13 .globl _someFunction
+ 14 .globl _CY
+ 15 .globl _AC
+ 16 .globl _F0
+ 17 .globl _RS1
+ 18 .globl _RS0
+ 19 .globl _OV
+ 20 .globl _FL
+ 21 .globl _P
+ 22 .globl _PS
+ 23 .globl _PT1
+ 24 .globl _PX1
+ 25 .globl _PT0
+ 26 .globl _PX0
+ 27 .globl _RD
+ 28 .globl _WR
+ 29 .globl _T1
+ 30 .globl _T0
+ 31 .globl _INT1
+ 32 .globl _INT0
+ 33 .globl _TXD
+ 34 .globl _RXD
+ 35 .globl _P3_7
+ 36 .globl _P3_6
+ 37 .globl _P3_5
+ 38 .globl _P3_4
+ 39 .globl _P3_3
+ 40 .globl _P3_2
+ 41 .globl _P3_1
+ 42 .globl _P3_0
+ 43 .globl _EA
+ 44 .globl _ES
+ 45 .globl _ET1
+ 46 .globl _EX1
+ 47 .globl _ET0
+ 48 .globl _EX0
+ 49 .globl _P2_7
+ 50 .globl _P2_6
+ 51 .globl _P2_5
+ 52 .globl _P2_4
+ 53 .globl _P2_3
+ 54 .globl _P2_2
+ 55 .globl _P2_1
+ 56 .globl _P2_0
+ 57 .globl _SM0
+ 58 .globl _SM1
+ 59 .globl _SM2
+ 60 .globl _REN
+ 61 .globl _TB8
+ 62 .globl _RB8
+ 63 .globl _TI
+ 64 .globl _RI
+ 65 .globl _P1_7
+ 66 .globl _P1_6
+ 67 .globl _P1_5
+ 68 .globl _P1_4
+ 69 .globl _P1_3
+ 70 .globl _P1_2
+ 71 .globl _P1_1
+ 72 .globl _P1_0
+ 73 .globl _TF1
+ 74 .globl _TR1
+ 75 .globl _TF0
+ 76 .globl _TR0
+ 77 .globl _IE1
+ 78 .globl _IT1
+ 79 .globl _IE0
+ 80 .globl _IT0
+ 81 .globl _P0_7
+ 82 .globl _P0_6
+ 83 .globl _P0_5
+ 84 .globl _P0_4
+ 85 .globl _P0_3
+ 86 .globl _P0_2
+ 87 .globl _P0_1
+ 88 .globl _P0_0
+ 89 .globl _B
+ 90 .globl _A
+ 91 .globl _ACC
+ 92 .globl _PSW
+ 93 .globl _IP
+ 94 .globl _P3
+ 95 .globl _IE
+ 96 .globl _P2
+ 97 .globl _SBUF
+ 98 .globl _SCON
+ 99 .globl _P1
+ 100 .globl _TH1
+ 101 .globl _TH0
+ 102 .globl _TL1
+ 103 .globl _TL0
+ 104 .globl _TMOD
+ 105 .globl _TCON
+ 106 .globl _PCON
+ 107 .globl _DPH
+ 108 .globl _DPL
+ 109 .globl _SP
+ 110 .globl _P0
+ 111 .globl _i
+ 112 .globl _some_variable
+ 113 ;--------------------------------------------------------
+ 114 ; special function registers
+ 115 ;--------------------------------------------------------
+ 116 .area RSEG (DATA)
+ 0080 117 G$P0$0$0 == 0x0080
+ 0080 118 _P0 = 0x0080
+ 0081 119 G$SP$0$0 == 0x0081
+ 0081 120 _SP = 0x0081
+ 0082 121 G$DPL$0$0 == 0x0082
+ 0082 122 _DPL = 0x0082
+ 0083 123 G$DPH$0$0 == 0x0083
+ 0083 124 _DPH = 0x0083
+ 0087 125 G$PCON$0$0 == 0x0087
+ 0087 126 _PCON = 0x0087
+ 0088 127 G$TCON$0$0 == 0x0088
+ 0088 128 _TCON = 0x0088
+ 0089 129 G$TMOD$0$0 == 0x0089
+ 0089 130 _TMOD = 0x0089
+ 008A 131 G$TL0$0$0 == 0x008a
+ 008A 132 _TL0 = 0x008a
+ 008B 133 G$TL1$0$0 == 0x008b
+ 008B 134 _TL1 = 0x008b
+ 008C 135 G$TH0$0$0 == 0x008c
+ 008C 136 _TH0 = 0x008c
+ 008D 137 G$TH1$0$0 == 0x008d
+ 008D 138 _TH1 = 0x008d
+ 0090 139 G$P1$0$0 == 0x0090
+ 0090 140 _P1 = 0x0090
+ 0098 141 G$SCON$0$0 == 0x0098
+ 0098 142 _SCON = 0x0098
+ 0099 143 G$SBUF$0$0 == 0x0099
+ 0099 144 _SBUF = 0x0099
+ 00A0 145 G$P2$0$0 == 0x00a0
+ 00A0 146 _P2 = 0x00a0
+ 00A8 147 G$IE$0$0 == 0x00a8
+ 00A8 148 _IE = 0x00a8
+ 00B0 149 G$P3$0$0 == 0x00b0
+ 00B0 150 _P3 = 0x00b0
+ 00B8 151 G$IP$0$0 == 0x00b8
+ 00B8 152 _IP = 0x00b8
+ 00D0 153 G$PSW$0$0 == 0x00d0
+ 00D0 154 _PSW = 0x00d0
+ 00E0 155 G$ACC$0$0 == 0x00e0
+ 00E0 156 _ACC = 0x00e0
+ 00E0 157 G$A$0$0 == 0x00e0
+ 00E0 158 _A = 0x00e0
+ 00F0 159 G$B$0$0 == 0x00f0
+ 00F0 160 _B = 0x00f0
+ 161 ;--------------------------------------------------------
+ 162 ; special function bits
+ 163 ;--------------------------------------------------------
+ 164 .area RSEG (DATA)
+ 0080 165 G$P0_0$0$0 == 0x0080
+ 0080 166 _P0_0 = 0x0080
+ 0081 167 G$P0_1$0$0 == 0x0081
+ 0081 168 _P0_1 = 0x0081
+ 0082 169 G$P0_2$0$0 == 0x0082
+ 0082 170 _P0_2 = 0x0082
+ 0083 171 G$P0_3$0$0 == 0x0083
+ 0083 172 _P0_3 = 0x0083
+ 0084 173 G$P0_4$0$0 == 0x0084
+ 0084 174 _P0_4 = 0x0084
+ 0085 175 G$P0_5$0$0 == 0x0085
+ 0085 176 _P0_5 = 0x0085
+ 0086 177 G$P0_6$0$0 == 0x0086
+ 0086 178 _P0_6 = 0x0086
+ 0087 179 G$P0_7$0$0 == 0x0087
+ 0087 180 _P0_7 = 0x0087
+ 0088 181 G$IT0$0$0 == 0x0088
+ 0088 182 _IT0 = 0x0088
+ 0089 183 G$IE0$0$0 == 0x0089
+ 0089 184 _IE0 = 0x0089
+ 008A 185 G$IT1$0$0 == 0x008a
+ 008A 186 _IT1 = 0x008a
+ 008B 187 G$IE1$0$0 == 0x008b
+ 008B 188 _IE1 = 0x008b
+ 008C 189 G$TR0$0$0 == 0x008c
+ 008C 190 _TR0 = 0x008c
+ 008D 191 G$TF0$0$0 == 0x008d
+ 008D 192 _TF0 = 0x008d
+ 008E 193 G$TR1$0$0 == 0x008e
+ 008E 194 _TR1 = 0x008e
+ 008F 195 G$TF1$0$0 == 0x008f
+ 008F 196 _TF1 = 0x008f
+ 0090 197 G$P1_0$0$0 == 0x0090
+ 0090 198 _P1_0 = 0x0090
+ 0091 199 G$P1_1$0$0 == 0x0091
+ 0091 200 _P1_1 = 0x0091
+ 0092 201 G$P1_2$0$0 == 0x0092
+ 0092 202 _P1_2 = 0x0092
+ 0093 203 G$P1_3$0$0 == 0x0093
+ 0093 204 _P1_3 = 0x0093
+ 0094 205 G$P1_4$0$0 == 0x0094
+ 0094 206 _P1_4 = 0x0094
+ 0095 207 G$P1_5$0$0 == 0x0095
+ 0095 208 _P1_5 = 0x0095
+ 0096 209 G$P1_6$0$0 == 0x0096
+ 0096 210 _P1_6 = 0x0096
+ 0097 211 G$P1_7$0$0 == 0x0097
+ 0097 212 _P1_7 = 0x0097
+ 0098 213 G$RI$0$0 == 0x0098
+ 0098 214 _RI = 0x0098
+ 0099 215 G$TI$0$0 == 0x0099
+ 0099 216 _TI = 0x0099
+ 009A 217 G$RB8$0$0 == 0x009a
+ 009A 218 _RB8 = 0x009a
+ 009B 219 G$TB8$0$0 == 0x009b
+ 009B 220 _TB8 = 0x009b
+ 009C 221 G$REN$0$0 == 0x009c
+ 009C 222 _REN = 0x009c
+ 009D 223 G$SM2$0$0 == 0x009d
+ 009D 224 _SM2 = 0x009d
+ 009E 225 G$SM1$0$0 == 0x009e
+ 009E 226 _SM1 = 0x009e
+ 009F 227 G$SM0$0$0 == 0x009f
+ 009F 228 _SM0 = 0x009f
+ 00A0 229 G$P2_0$0$0 == 0x00a0
+ 00A0 230 _P2_0 = 0x00a0
+ 00A1 231 G$P2_1$0$0 == 0x00a1
+ 00A1 232 _P2_1 = 0x00a1
+ 00A2 233 G$P2_2$0$0 == 0x00a2
+ 00A2 234 _P2_2 = 0x00a2
+ 00A3 235 G$P2_3$0$0 == 0x00a3
+ 00A3 236 _P2_3 = 0x00a3
+ 00A4 237 G$P2_4$0$0 == 0x00a4
+ 00A4 238 _P2_4 = 0x00a4
+ 00A5 239 G$P2_5$0$0 == 0x00a5
+ 00A5 240 _P2_5 = 0x00a5
+ 00A6 241 G$P2_6$0$0 == 0x00a6
+ 00A6 242 _P2_6 = 0x00a6
+ 00A7 243 G$P2_7$0$0 == 0x00a7
+ 00A7 244 _P2_7 = 0x00a7
+ 00A8 245 G$EX0$0$0 == 0x00a8
+ 00A8 246 _EX0 = 0x00a8
+ 00A9 247 G$ET0$0$0 == 0x00a9
+ 00A9 248 _ET0 = 0x00a9
+ 00AA 249 G$EX1$0$0 == 0x00aa
+ 00AA 250 _EX1 = 0x00aa
+ 00AB 251 G$ET1$0$0 == 0x00ab
+ 00AB 252 _ET1 = 0x00ab
+ 00AC 253 G$ES$0$0 == 0x00ac
+ 00AC 254 _ES = 0x00ac
+ 00AF 255 G$EA$0$0 == 0x00af
+ 00AF 256 _EA = 0x00af
+ 00B0 257 G$P3_0$0$0 == 0x00b0
+ 00B0 258 _P3_0 = 0x00b0
+ 00B1 259 G$P3_1$0$0 == 0x00b1
+ 00B1 260 _P3_1 = 0x00b1
+ 00B2 261 G$P3_2$0$0 == 0x00b2
+ 00B2 262 _P3_2 = 0x00b2
+ 00B3 263 G$P3_3$0$0 == 0x00b3
+ 00B3 264 _P3_3 = 0x00b3
+ 00B4 265 G$P3_4$0$0 == 0x00b4
+ 00B4 266 _P3_4 = 0x00b4
+ 00B5 267 G$P3_5$0$0 == 0x00b5
+ 00B5 268 _P3_5 = 0x00b5
+ 00B6 269 G$P3_6$0$0 == 0x00b6
+ 00B6 270 _P3_6 = 0x00b6
+ 00B7 271 G$P3_7$0$0 == 0x00b7
+ 00B7 272 _P3_7 = 0x00b7
+ 00B0 273 G$RXD$0$0 == 0x00b0
+ 00B0 274 _RXD = 0x00b0
+ 00B1 275 G$TXD$0$0 == 0x00b1
+ 00B1 276 _TXD = 0x00b1
+ 00B2 277 G$INT0$0$0 == 0x00b2
+ 00B2 278 _INT0 = 0x00b2
+ 00B3 279 G$INT1$0$0 == 0x00b3
+ 00B3 280 _INT1 = 0x00b3
+ 00B4 281 G$T0$0$0 == 0x00b4
+ 00B4 282 _T0 = 0x00b4
+ 00B5 283 G$T1$0$0 == 0x00b5
+ 00B5 284 _T1 = 0x00b5
+ 00B6 285 G$WR$0$0 == 0x00b6
+ 00B6 286 _WR = 0x00b6
+ 00B7 287 G$RD$0$0 == 0x00b7
+ 00B7 288 _RD = 0x00b7
+ 00B8 289 G$PX0$0$0 == 0x00b8
+ 00B8 290 _PX0 = 0x00b8
+ 00B9 291 G$PT0$0$0 == 0x00b9
+ 00B9 292 _PT0 = 0x00b9
+ 00BA 293 G$PX1$0$0 == 0x00ba
+ 00BA 294 _PX1 = 0x00ba
+ 00BB 295 G$PT1$0$0 == 0x00bb
+ 00BB 296 _PT1 = 0x00bb
+ 00BC 297 G$PS$0$0 == 0x00bc
+ 00BC 298 _PS = 0x00bc
+ 00D0 299 G$P$0$0 == 0x00d0
+ 00D0 300 _P = 0x00d0
+ 00D1 301 G$FL$0$0 == 0x00d1
+ 00D1 302 _FL = 0x00d1
+ 00D2 303 G$OV$0$0 == 0x00d2
+ 00D2 304 _OV = 0x00d2
+ 00D3 305 G$RS0$0$0 == 0x00d3
+ 00D3 306 _RS0 = 0x00d3
+ 00D4 307 G$RS1$0$0 == 0x00d4
+ 00D4 308 _RS1 = 0x00d4
+ 00D5 309 G$F0$0$0 == 0x00d5
+ 00D5 310 _F0 = 0x00d5
+ 00D6 311 G$AC$0$0 == 0x00d6
+ 00D6 312 _AC = 0x00d6
+ 00D7 313 G$CY$0$0 == 0x00d7
+ 00D7 314 _CY = 0x00d7
+ 315 ;--------------------------------------------------------
+ 316 ; overlayable register banks
+ 317 ;--------------------------------------------------------
+ 318 .area REG_BANK_0 (REL,OVR,DATA)
+ 0000 319 .ds 8
+ 320 ;--------------------------------------------------------
+ 321 ; internal ram data
+ 322 ;--------------------------------------------------------
+ 323 .area DSEG (DATA)
+ 0000 324 G$some_variable$0$0==.
+ 0000 325 _some_variable::
+ 0000 326 .ds 4
+ 0004 327 G$i$0$0==.
+ 0004 328 _i::
+ 0004 329 .ds 2
+ 330 ;--------------------------------------------------------
+ 331 ; overlayable items in internal ram
+ 332 ;--------------------------------------------------------
+ 333 .area OSEG (OVR,DATA)
+ 334 ;--------------------------------------------------------
+ 335 ; Stack segment in internal ram
+ 336 ;--------------------------------------------------------
+ 337 .area SSEG (DATA)
+ 0000 338 __start__stack:
+ 0000 339 .ds 1
+ 340
+ 341 ;--------------------------------------------------------
+ 342 ; indirectly addressable internal ram data
+ 343 ;--------------------------------------------------------
+ 344 .area ISEG (DATA)
+ 345 ;--------------------------------------------------------
+ 346 ; absolute internal ram data
+ 347 ;--------------------------------------------------------
+ 348 .area IABS (ABS,DATA)
+ 349 .area IABS (ABS,DATA)
+ 350 ;--------------------------------------------------------
+ 351 ; bit data
+ 352 ;--------------------------------------------------------
+ 353 .area BSEG (BIT)
+ 354 ;--------------------------------------------------------
+ 355 ; paged external ram data
+ 356 ;--------------------------------------------------------
+ 357 .area PSEG (PAG,XDATA)
+ 358 ;--------------------------------------------------------
+ 359 ; external ram data
+ 360 ;--------------------------------------------------------
+ 361 .area XSEG (XDATA)
+ 362 ;--------------------------------------------------------
+ 363 ; absolute external ram data
+ 364 ;--------------------------------------------------------
+ 365 .area XABS (ABS,XDATA)
+ 366 ;--------------------------------------------------------
+ 367 ; external initialized ram data
+ 368 ;--------------------------------------------------------
+ 369 .area XISEG (XDATA)
+ 370 .area HOME (CODE)
+ 371 .area GSINIT0 (CODE)
+ 372 .area GSINIT1 (CODE)
+ 373 .area GSINIT2 (CODE)
+ 374 .area GSINIT3 (CODE)
+ 375 .area GSINIT4 (CODE)
+ 376 .area GSINIT5 (CODE)
+ 377 .area GSINIT (CODE)
+ 378 .area GSFINAL (CODE)
+ 379 .area CSEG (CODE)
+ 380 ;--------------------------------------------------------
+ 381 ; interrupt vector
+ 382 ;--------------------------------------------------------
+ 383 .area HOME (CODE)
+ 0000 384 __interrupt_vect:
+ 0000 02s00r00 385 ljmp __sdcc_gsinit_startup
+ 386 ;--------------------------------------------------------
+ 387 ; global & static initialisations
+ 388 ;--------------------------------------------------------
+ 389 .area HOME (CODE)
+ 390 .area GSINIT (CODE)
+ 391 .area GSFINAL (CODE)
+ 392 .area GSINIT (CODE)
+ 393 .globl __sdcc_gsinit_startup
+ 394 .globl __sdcc_program_startup
+ 395 .globl __start__stack
+ 396 .globl __mcs51_genXINIT
+ 397 .globl __mcs51_genXRAMCLEAR
+ 398 .globl __mcs51_genRAMCLEAR
+ 0000 399 G$main$0$0 ==.
+ 0000 400 C$demo_c_0.c$10$1$1 ==.
+ 401 ; demo_c_0.c:10: unsigned long some_variable=0; ///< Documentation for this variable comes here
+ 0000 E4 402 clr a
+ 0001 F5*00 403 mov _some_variable,a
+ 0003 F5*01 404 mov (_some_variable + 1),a
+ 0005 F5*02 405 mov (_some_variable + 2),a
+ 0007 F5*03 406 mov (_some_variable + 3),a
+ 407 .area GSFINAL (CODE)
+ 0000 02s00r03 408 ljmp __sdcc_program_startup
+ 409 ;--------------------------------------------------------
+ 410 ; Home
+ 411 ;--------------------------------------------------------
+ 412 .area HOME (CODE)
+ 413 .area HOME (CODE)
+ 0003 414 __sdcc_program_startup:
+ 0003 12s00r0A 415 lcall _main
+ 416 ; return from main will lock up
+ 0006 80 FE 417 sjmp .
+ 418 ;--------------------------------------------------------
+ 419 ; code
+ 420 ;--------------------------------------------------------
+ 421 .area CSEG (CODE)
+ 422 ;------------------------------------------------------------
+ 423 ;Allocation info for local variables in function 'someFunction'
+ 424 ;------------------------------------------------------------
+ 425 ;somevalue Allocated to registers r2
+ 426 ;------------------------------------------------------------
+ 0000 427 G$someFunction$0$0 ==.
+ 0000 428 C$demo_c_0.c$20$0$0 ==.
+ 429 ; demo_c_0.c:20: void someFunction(unsigned char somevalue)
+ 430 ; -----------------------------------------
+ 431 ; function someFunction
+ 432 ; -----------------------------------------
+ 0000 433 _someFunction:
+ 0002 434 ar2 = 0x02
+ 0003 435 ar3 = 0x03
+ 0004 436 ar4 = 0x04
+ 0005 437 ar5 = 0x05
+ 0006 438 ar6 = 0x06
+ 0007 439 ar7 = 0x07
+ 0000 440 ar0 = 0x00
+ 0001 441 ar1 = 0x01
+ 0000 AA 82 442 mov r2,dpl
+ 0002 443 C$demo_c_0.c$23$1$1 ==.
+ 444 ; demo_c_0.c:23: P1=somevalue;
+ 0002 8A 90 445 mov _P1,r2
+ 0004 446 C$demo_c_0.c$24$1$1 ==.
+ 447 ; demo_c_0.c:24: P3=somevalue^0xFF;
+ 0004 74 FF 448 mov a,#0xFF
+ 0006 6A 449 xrl a,r2
+ 0007 F5 B0 450 mov _P3,a
+ 0009 451 C$demo_c_0.c$25$1$1 ==.
+ 0009 452 XG$someFunction$0$0 ==.
+ 0009 22 453 ret
+ 454 ;------------------------------------------------------------
+ 455 ;Allocation info for local variables in function 'main'
+ 456 ;------------------------------------------------------------
+ 457 ;------------------------------------------------------------
+ 000A 458 G$main$0$0 ==.
+ 000A 459 C$demo_c_0.c$28$1$1 ==.
+ 460 ; demo_c_0.c:28: int main()
+ 461 ; -----------------------------------------
+ 462 ; function main
+ 463 ; -----------------------------------------
+ 000A 464 _main:
+ 000A 465 C$demo_c_0.c$31$1$1 ==.
+ 466 ; demo_c_0.c:31: while(1) {
+ 000A 467 00102$:
+ 000A 468 C$demo_c_0.c$32$2$2 ==.
+ 469 ; demo_c_0.c:32: for(i=0; i<255; i++) {
+ 000A E4 470 clr a
+ 000B F5*04 471 mov _i,a
+ 000D F5*05 472 mov (_i + 1),a
+ 000F 473 00104$:
+ 000F C3 474 clr c
+ 0010 E5*04 475 mov a,_i
+ 0012 94 FF 476 subb a,#0xFF
+ 0014 E5*05 477 mov a,(_i + 1)
+ 0016 64 80 478 xrl a,#0x80
+ 0018 94 80 479 subb a,#0x80
+ 001A 50 26 480 jnc 00107$
+ 001C 481 C$demo_c_0.c$33$3$3 ==.
+ 482 ; demo_c_0.c:33: someFunction(i+2);
+ 001C AA*04 483 mov r2,_i
+ 001E 74 02 484 mov a,#0x02
+ 0020 2A 485 add a,r2
+ 0021 F5 82 486 mov dpl,a
+ 0023 12s00r00 487 lcall _someFunction
+ 0026 488 C$demo_c_0.c$34$3$3 ==.
+ 489 ; demo_c_0.c:34: some_variable++;
+ 0026 05*00 490 inc _some_variable
+ 0028 E4 491 clr a
+ 0029 B5*00 0C 492 cjne a,_some_variable,00114$
+ 002C 05*01 493 inc (_some_variable + 1)
+ 002E B5*01 07 494 cjne a,(_some_variable + 1),00114$
+ 0031 05*02 495 inc (_some_variable + 2)
+ 0033 B5*02 02 496 cjne a,(_some_variable + 2),00114$
+ 0036 05*03 497 inc (_some_variable + 3)
+ 0038 498 00114$:
+ 0038 499 C$demo_c_0.c$32$2$2 ==.
+ 500 ; demo_c_0.c:32: for(i=0; i<255; i++) {
+ 0038 05*04 501 inc _i
+ 003A E4 502 clr a
+ 003B B5*04 D1 503 cjne a,_i,00104$
+ 003E 05*05 504 inc (_i + 1)
+ 0040 80 CD 505 sjmp 00104$
+ 0042 506 00107$:
+ 0042 507 C$demo_c_0.c$36$2$2 ==.
+ 508 ; demo_c_0.c:36: some_variable-=22;
+ 0042 E5*00 509 mov a,_some_variable
+ 0044 24 EA 510 add a,#0xea
+ 0046 F5*00 511 mov _some_variable,a
+ 0048 E5*01 512 mov a,(_some_variable + 1)
+ 004A 34 FF 513 addc a,#0xff
+ 004C F5*01 514 mov (_some_variable + 1),a
+ 004E E5*02 515 mov a,(_some_variable + 2)
+ 0050 34 FF 516 addc a,#0xff
+ 0052 F5*02 517 mov (_some_variable + 2),a
+ 0054 E5*03 518 mov a,(_some_variable + 3)
+ 0056 34 FF 519 addc a,#0xff
+ 0058 F5*03 520 mov (_some_variable + 3),a
+ 005A 521 C$demo_c_0.c$40$1$1 ==.
+ 522 ; demo_c_0.c:40: return 0;
+ 005A 523 C$demo_c_0.c$41$1$1 ==.
+ 005A 524 XG$main$0$0 ==.
+ 005A 80 AE 525 sjmp 00102$
+ 526 .area CSEG (CODE)
+ 527 .area CONST (CODE)
+ 528 .area XINIT (CODE)
+ 529 .area CABS (ABS,CODE)
diff --git a/demo/demo_c_0.map b/demo/demo_c_0.map
new file mode 100644
index 0000000..d1247dd
--- /dev/null
+++ b/demo/demo_c_0.map
@@ -0,0 +1,488 @@
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CABS 0000 0000 = 0. bytes (ABS,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:FFFFFF00 s_BSEG
+ 0C:0000 l_BIT_BANK
+ 0C:0000 l_BSEG
+ 0C:0000 l_BSEG_BYTES
+ 0C:0000 l_CABS
+ 0C:0000 l_CONST
+ 0C:0000 l_GSINIT1
+ 0C:0000 l_GSINIT5
+ 0C:0000 l_IABS
+ 0C:0000 l_ISEG
+ 0C:0000 l_OSEG
+ 0C:0000 l_PSEG
+ 0C:0000 l_REG_BANK_1
+ 0C:0000 l_REG_BANK_2
+ 0C:0000 l_REG_BANK_3
+ 0C:0000 l_RSEG
+ 0C:0000 l_XABS
+ 0C:0000 l_XINIT
+ 0C:0000 l_XISEG
+ 0C:0000 l_XSEG
+ 0C:0000 l__CODE
+ 0C:0000 s_BSEG_BYTES
+ 0C:0000 s_CABS
+ 0C:0000 s_DSEG
+ 0C:0000 s_HOME
+ 0C:0000 s_IABS
+ 0C:0000 s_ISEG
+ 0C:0000 s_PSEG
+ 0C:0000 s_REG_BANK_0
+ 0C:0000 s_XABS
+ 0C:0000 s_XISEG
+ 0C:0000 s_XSEG
+ 0C:0003 l_GSFINAL
+ 0C:0003 l_GSINIT0
+ 0C:0008 l_HOME
+ 0C:0008 l_REG_BANK_0
+ 0C:0008 s_GSINIT0
+ 0C:0008 s_REG_BANK_1
+ 0C:0009 l_GSINIT
+ 0C:000A l_GSINIT2
+ 0C:000B s_GSINIT1
+ 0C:000B s_GSINIT2
+ 0C:000E s_RSEG
+ 0C:000E s_SSEG
+ 0C:0010 s_REG_BANK_2
+ 0C:0015 s_GSINIT3
+ 0C:0018 s_BIT_BANK
+ 0C:0018 s_OSEG
+ 0C:0018 s_REG_BANK_3
+ 0C:0020 s__CODE
+ 0C:0022 l_GSINIT3
+ 0C:002A l_GSINIT4
+ 0C:0037 s_GSINIT4
+ 0C:0060 l_CSEG
+ 0C:0061 s_GSINIT
+ 0C:0061 s_GSINIT5
+ 0C:006A s_GSFINAL
+ 0C:006D s_CSEG
+ 0C:0080 l_DSEG
+ 0C:00CD s_CONST
+ 0C:00CD s_XINIT
+ 0C:00F2 l_SSEG
+ 0C:0100 l_IRAM
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+. .ABS. 0000 0000 = 0. bytes (ABS,CON)
+
+ Value Global
+ -------- --------------------------------
+ 0080 G$P0$0$0
+ 0080 G$P0_0$0$0
+ 0080 _P0
+ 0080 _P0_0
+ 0081 G$P0_1$0$0
+ 0081 G$SP$0$0
+ 0081 _P0_1
+ 0081 _SP
+ 0082 G$DPL$0$0
+ 0082 G$P0_2$0$0
+ 0082 _DPL
+ 0082 _P0_2
+ 0083 G$DPH$0$0
+ 0083 G$P0_3$0$0
+ 0083 _DPH
+ 0083 _P0_3
+ 0084 G$P0_4$0$0
+ 0084 _P0_4
+ 0085 G$P0_5$0$0
+ 0085 _P0_5
+ 0086 G$P0_6$0$0
+ 0086 _P0_6
+ 0087 G$P0_7$0$0
+ 0087 G$PCON$0$0
+ 0087 _P0_7
+ 0087 _PCON
+ 0088 G$IT0$0$0
+ 0088 G$TCON$0$0
+ 0088 _IT0
+ 0088 _TCON
+ 0089 G$IE0$0$0
+ 0089 G$TMOD$0$0
+ 0089 _IE0
+ 0089 _TMOD
+ 008A G$IT1$0$0
+ 008A G$TL0$0$0
+ 008A _IT1
+ 008A _TL0
+ 008B G$IE1$0$0
+ 008B G$TL1$0$0
+ 008B _IE1
+ 008B _TL1
+ 008C G$TH0$0$0
+ 008C G$TR0$0$0
+ 008C _TH0
+ 008C _TR0
+ 008D G$TF0$0$0
+ 008D G$TH1$0$0
+ 008D _TF0
+ 008D _TH1
+ 008E G$TR1$0$0
+ 008E _TR1
+ 008F G$TF1$0$0
+ 008F _TF1
+ 0090 G$P1$0$0
+ 0090 G$P1_0$0$0
+ 0090 _P1
+ 0090 _P1_0
+ 0091 G$P1_1$0$0
+ 0091 _P1_1
+ 0092 G$P1_2$0$0
+ 0092 _P1_2
+ 0093 G$P1_3$0$0
+ 0093 _P1_3
+ 0094 G$P1_4$0$0
+ 0094 _P1_4
+ 0095 G$P1_5$0$0
+ 0095 _P1_5
+ 0096 G$P1_6$0$0
+ 0096 _P1_6
+ 0097 G$P1_7$0$0
+ 0097 _P1_7
+ 0098 G$RI$0$0
+ 0098 G$SCON$0$0
+ 0098 _RI
+ 0098 _SCON
+ 0099 G$SBUF$0$0
+ 0099 G$TI$0$0
+ 0099 _SBUF
+ 0099 _TI
+ 009A G$RB8$0$0
+ 009A _RB8
+ 009B G$TB8$0$0
+ 009B _TB8
+ 009C G$REN$0$0
+ 009C _REN
+ 009D G$SM2$0$0
+ 009D _SM2
+ 009E G$SM1$0$0
+ 009E _SM1
+ 009F G$SM0$0$0
+ 009F _SM0
+ 00A0 G$P2$0$0
+ 00A0 G$P2_0$0$0
+ 00A0 _P2
+ 00A0 _P2_0
+ 00A0 __XPAGE
+ 00A1 G$P2_1$0$0
+ 00A1 _P2_1
+ 00A2 G$P2_2$0$0
+ 00A2 _P2_2
+ 00A3 G$P2_3$0$0
+ 00A3 _P2_3
+ 00A4 G$P2_4$0$0
+ 00A4 _P2_4
+ 00A5 G$P2_5$0$0
+ 00A5 _P2_5
+ 00A6 G$P2_6$0$0
+ 00A6 _P2_6
+ 00A7 G$P2_7$0$0
+ 00A7 _P2_7
+ 00A8 G$EX0$0$0
+ 00A8 G$IE$0$0
+ 00A8 _EX0
+ 00A8 _IE
+ 00A9 G$ET0$0$0
+ 00A9 _ET0
+ 00AA G$EX1$0$0
+ 00AA _EX1
+ 00AB G$ET1$0$0
+ 00AB _ET1
+ 00AC G$ES$0$0
+ 00AC _ES
+ 00AF G$EA$0$0
+ 00AF _EA
+ 00B0 G$P3$0$0
+ 00B0 G$P3_0$0$0
+ 00B0 G$RXD$0$0
+ 00B0 _P3
+ 00B0 _P3_0
+ 00B0 _RXD
+ 00B1 G$P3_1$0$0
+ 00B1 G$TXD$0$0
+ 00B1 _P3_1
+ 00B1 _TXD
+ 00B2 G$INT0$0$0
+ 00B2 G$P3_2$0$0
+ 00B2 _INT0
+ 00B2 _P3_2
+ 00B3 G$INT1$0$0
+ 00B3 G$P3_3$0$0
+ 00B3 _INT1
+ 00B3 _P3_3
+ 00B4 G$P3_4$0$0
+ 00B4 G$T0$0$0
+ 00B4 _P3_4
+ 00B4 _T0
+ 00B5 G$P3_5$0$0
+ 00B5 G$T1$0$0
+ 00B5 _P3_5
+ 00B5 _T1
+ 00B6 G$P3_6$0$0
+ 00B6 G$WR$0$0
+ 00B6 _P3_6
+ 00B6 _WR
+ 00B7 G$P3_7$0$0
+ 00B7 G$RD$0$0
+ 00B7 _P3_7
+ 00B7 _RD
+ 00B8 G$IP$0$0
+ 00B8 G$PX0$0$0
+ 00B8 _IP
+ 00B8 _PX0
+ 00B9 G$PT0$0$0
+ 00B9 _PT0
+ 00BA G$PX1$0$0
+ 00BA _PX1
+ 00BB G$PT1$0$0
+ 00BB _PT1
+ 00BC G$PS$0$0
+ 00BC _PS
+ 00D0 G$P$0$0
+ 00D0 G$PSW$0$0
+ 00D0 _P
+ 00D0 _PSW
+ 00D1 G$FL$0$0
+ 00D1 _FL
+ 00D2 G$OV$0$0
+ 00D2 _OV
+ 00D3 G$RS0$0$0
+ 00D3 _RS0
+ 00D4 G$RS1$0$0
+ 00D4 _RS1
+ 00D5 G$F0$0$0
+ 00D5 _F0
+ 00D6 G$AC$0$0
+ 00D6 _AC
+ 00D7 G$CY$0$0
+ 00D7 _CY
+ 00E0 G$A$0$0
+ 00E0 G$ACC$0$0
+ 00E0 _A
+ 00E0 _ACC
+ 00F0 G$B$0$0
+ 00F0 _B
+
+
+
+
+
+
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+DSEG 0000 0080 = 128. bytes (REL,CON)
+
+ Value Global
+ -------- --------------------------------
+ 0008 G$some_variable$0$0
+ 0008 _some_variable
+ 000C G$i$0$0
+ 000C _i
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+SSEG 000E 00F2 = 242. bytes (REL,OVR)
+
+ Value Global
+ -------- --------------------------------
+ 000E __start__stack
+
+
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+HOME 0000 0008 = 8. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0000 A$demo_c_0$385
+ 0C:0003 A$demo_c_0$415
+ 0C:0003 __sdcc_program_startup
+ 0C:0006 A$demo_c_0$417
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT0 0008 0003 = 3. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0008 __sdcc_gsinit_startup
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT3 0015 0022 = 34. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0015 __mcs51_genXINIT
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT4 0037 002A = 42. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0037 __mcs51_genRAMCLEAR
+ 0C:003D __mcs51_genXRAMCLEAR
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT 0061 0009 = 9. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0061 A$demo_c_0$402
+ 0C:0061 C$demo_c_0.c$10$1$1
+ 0C:0062 A$demo_c_0$403
+ 0C:0064 A$demo_c_0$404
+ 0C:0066 A$demo_c_0$405
+ 0C:0068 A$demo_c_0$406
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSFINAL 006A 0003 = 3. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:006A A$demo_c_0$408
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CSEG 006D 0060 = 96. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:006D A$demo_c_0$442
+ 0C:006D C$demo_c_0.c$20$0$0
+ 0C:006D G$someFunction$0$0
+ 0C:006D _someFunction
+ 0C:006F A$demo_c_0$445
+ 0C:006F C$demo_c_0.c$23$1$1
+ 0C:0071 A$demo_c_0$448
+ 0C:0071 C$demo_c_0.c$24$1$1
+ 0C:0073 A$demo_c_0$449
+ 0C:0074 A$demo_c_0$450
+ 0C:0076 A$demo_c_0$453
+ 0C:0076 C$demo_c_0.c$25$1$1
+ 0C:0076 XG$someFunction$0$0
+ 0C:0077 A$demo_c_0$470
+ 0C:0077 C$demo_c_0.c$28$1$1
+ 0C:0077 C$demo_c_0.c$31$1$1
+ 0C:0077 G$main$0$0
+ 0C:0077 _main
+ 0C:0078 A$demo_c_0$471
+ 0C:007A A$demo_c_0$472
+ 0C:007C A$demo_c_0$474
+ 0C:007D A$demo_c_0$475
+ 0C:007F A$demo_c_0$476
+ 0C:0081 A$demo_c_0$477
+ 0C:0083 A$demo_c_0$478
+ 0C:0085 A$demo_c_0$479
+ 0C:0087 A$demo_c_0$480
+ 0C:0089 A$demo_c_0$483
+ 0C:0089 C$demo_c_0.c$33$3$3
+ 0C:008B A$demo_c_0$484
+ 0C:008D A$demo_c_0$485
+ 0C:008E A$demo_c_0$486
+ 0C:0090 A$demo_c_0$487
+ 0C:0093 A$demo_c_0$490
+ 0C:0093 C$demo_c_0.c$34$3$3
+ 0C:0095 A$demo_c_0$491
+ 0C:0096 A$demo_c_0$492
+ 0C:0099 A$demo_c_0$493
+ 0C:009B A$demo_c_0$494
+ 0C:009E A$demo_c_0$495
+ 0C:00A0 A$demo_c_0$496
+ 0C:00A3 A$demo_c_0$497
+ 0C:00A5 A$demo_c_0$501
+ 0C:00A5 C$demo_c_0.c$32$2$2
+ 0C:00A7 A$demo_c_0$502
+ 0C:00A8 A$demo_c_0$503
+ 0C:00AB A$demo_c_0$504
+ 0C:00AD A$demo_c_0$505
+ 0C:00AF A$demo_c_0$509
+ 0C:00AF C$demo_c_0.c$36$2$2
+ 0C:00B1 A$demo_c_0$510
+ 0C:00B3 A$demo_c_0$511
+ 0C:00B5 A$demo_c_0$512
+ 0C:00B7 A$demo_c_0$513
+ 0C:00B9 A$demo_c_0$514
+ 0C:00BB A$demo_c_0$515
+ 0C:00BD A$demo_c_0$516
+ 0C:00BF A$demo_c_0$517
+ 0C:00C1 A$demo_c_0$518
+ 0C:00C3 A$demo_c_0$519
+ 0C:00C5 A$demo_c_0$520
+ 0C:00C7 A$demo_c_0$525
+ 0C:00C7 C$demo_c_0.c$40$1$1
+ 0C:00C7 C$demo_c_0.c$41$1$1
+ 0C:00C7 XG$main$0$0
+ 0C:00C9 __sdcc_external_startup
+
+
+ ASxxxx Linker V01.75 + NoICE + SDCC Feb 1999, page 1.
+
+Files Linked [ module(s) ]
+
+demo_c_0.rel
+
+Libraries Linked [ object file ]
+
+/usr/share/sdcc/lib/small/mcs51.lib [ crtclear.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtxinit.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtxclear.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtpagesfr.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtstart.rel ]
+/usr/share/sdcc/lib/small/libsdcc.lib [ _startup.rel ]
+
+ ASxxxx Linker V01.75 + NoICE + SDCC Feb 1999, page 2.
+
+User Base Address Definitions
+
+HOME = 0x0000
+ISEG = 0x0000
+BSEG = 0x0000
+
+ \ No newline at end of file
diff --git a/demo/demo_c_0.mem b/demo/demo_c_0.mem
new file mode 100644
index 0000000..01837e4
--- /dev/null
+++ b/demo/demo_c_0.mem
@@ -0,0 +1,28 @@
+Internal RAM layout:
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+0x00:|0|0|0|0|0|0|0|0|a|a|a|a|a|a|S|S|
+0x10:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x20:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x30:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x40:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x80:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x90:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xa0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xb0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xc0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xd0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xe0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xf0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
+
+Stack starts at: 0x0e (sp set to 0x0d) with 242 bytes available.
+
+Other memory:
+ Name Start End Size Max
+ ---------------- -------- -------- -------- --------
+ PAGED EXT. RAM 0 0
+ EXTERNAL RAM 0 0
+ ROM/EPROM/FLASH 0x0000 0x00cc 205 2048
diff --git a/demo/demo_c_0.rel b/demo/demo_c_0.rel
new file mode 100644
index 0000000..172db17
--- /dev/null
+++ b/demo/demo_c_0.rel
@@ -0,0 +1,378 @@
+;!FILE demo_c_0.asm
+XH
+H 1A areas 117 global symbols
+M demo_c_0
+O -mmcs51 --model-small
+S G$EX0$0$0 Def00A8
+S G$IT0$0$0 Def0088
+S G$TH1$0$0 Def008D
+S _P1 Def0090
+S _A Def00E0
+S G$RXD$0$0 Def00B0
+S G$EX1$0$0 Def00AA
+S G$TB8$0$0 Def009B
+S G$IT1$0$0 Def008A
+S G$IE$0$0 Def00A8
+S _P2 Def00A0
+S _B Def00F0
+S _SP Def0081
+S _P3 Def00B0
+S _PS Def00BC
+S G$TXD$0$0 Def00B1
+S G$SM0$0$0 Def009F
+S G$TL0$0$0 Def008A
+S _T0 Def00B4
+S G$SM1$0$0 Def009E
+S G$TL1$0$0 Def008B
+S _T1 Def00B5
+S _OV Def00D2
+S G$FL$0$0 Def00D1
+S G$SM2$0$0 Def009D
+S _ACC Def00E0
+S __mcs51_genRAMCLEAR Ref0000
+S G$PT0$0$0 Def00B9
+S G$RS0$0$0 Def00D3
+S G$PT1$0$0 Def00BB
+S _WR Def00B6
+S G$F0$0$0 Def00D5
+S G$RS1$0$0 Def00D4
+S G$RD$0$0 Def00B7
+S G$TR0$0$0 Def008C
+S G$TR1$0$0 Def008E
+S G$PX0$0$0 Def00B8
+S G$ES$0$0 Def00AC
+S G$PX1$0$0 Def00BA
+S G$IP$0$0 Def00B8
+S G$PSW$0$0 Def00D0
+S G$RI$0$0 Def0098
+S _P0_0 Def0080
+S G$CY$0$0 Def00D7
+S _PCON Def0087
+S _SBUF Def0099
+S _P0_1 Def0081
+S _P1_0 Def0090
+S _P Def00D0
+S G$TI$0$0 Def0099
+S _P0_2 Def0082
+S _P1_1 Def0091
+S _P2_0 Def00A0
+S _P0_3 Def0083
+S _P1_2 Def0092
+S _P2_1 Def00A1
+S _P3_0 Def00B0
+S _SCON Def0098
+S _P0_4 Def0084
+S _P1_3 Def0093
+S _P2_2 Def00A2
+S _P3_1 Def00B1
+S G$P0$0$0 Def0080
+S _TCON Def0088
+S _TMOD Def0089
+S _P0_5 Def0085
+S _P1_4 Def0094
+S _P2_3 Def00A3
+S _P3_2 Def00B2
+S G$A$0$0 Def00E0
+S G$P1$0$0 Def0090
+S _P0_6 Def0086
+S _P1_5 Def0095
+S _P2_4 Def00A4
+S _P3_3 Def00B3
+S G$B$0$0 Def00F0
+S G$P2$0$0 Def00A0
+S _P0_7 Def0087
+S _P1_6 Def0096
+S _P2_5 Def00A5
+S _P3_4 Def00B4
+S G$PS$0$0 Def00BC
+S G$P3$0$0 Def00B0
+S G$SP$0$0 Def0081
+S _P1_7 Def0097
+S _P2_6 Def00A6
+S _P3_5 Def00B5
+S G$T0$0$0 Def00B4
+S _P2_7 Def00A7
+S _P3_6 Def00B6
+S G$OV$0$0 Def00D2
+S G$T1$0$0 Def00B5
+S _P3_7 Def00B7
+S G$ACC$0$0 Def00E0
+S _INT0 Def00B2
+S _DPH Def0083
+S _INT1 Def00B3
+S G$WR$0$0 Def00B6
+S _IE0 Def0089
+S _IE1 Def008B
+S _DPL Def0082
+S G$P0_0$0$0 Def0080
+S G$P$0$0 Def00D0
+S G$P1_0$0$0 Def0090
+S G$P0_1$0$0 Def0081
+S G$SBUF$0$0 Def0099
+S G$PCON$0$0 Def0087
+S _AC Def00D6
+S G$P2_0$0$0 Def00A0
+S G$P1_1$0$0 Def0091
+S G$P0_2$0$0 Def0082
+S _REN Def009C
+S G$P3_0$0$0 Def00B0
+S G$P2_1$0$0 Def00A1
+S G$P1_2$0$0 Def0092
+S G$P0_3$0$0 Def0083
+S _EA Def00AF
+S G$P3_1$0$0 Def00B1
+S G$P2_2$0$0 Def00A2
+S G$P1_3$0$0 Def0093
+S G$P0_4$0$0 Def0084
+S G$SCON$0$0 Def0098
+S G$P3_2$0$0 Def00B2
+S G$P2_3$0$0 Def00A3
+S G$P1_4$0$0 Def0094
+S G$P0_5$0$0 Def0085
+S G$TMOD$0$0 Def0089
+S G$TCON$0$0 Def0088
+S G$P3_3$0$0 Def00B3
+S G$P2_4$0$0 Def00A4
+S G$P1_5$0$0 Def0095
+S G$P0_6$0$0 Def0086
+S _ET0 Def00A9
+S G$P3_4$0$0 Def00B4
+S G$P2_5$0$0 Def00A5
+S G$P1_6$0$0 Def0096
+S G$P0_7$0$0 Def0087
+S _TF0 Def008D
+S _ET1 Def00AB
+S G$P3_5$0$0 Def00B5
+S G$P2_6$0$0 Def00A6
+S G$P1_7$0$0 Def0097
+S _TF1 Def008F
+S G$P3_6$0$0 Def00B6
+S G$P2_7$0$0 Def00A7
+S _TH0 Def008C
+S _RB8 Def009A
+S __mcs51_genXINIT Ref0000
+S G$P3_7$0$0 Def00B7
+S _TH1 Def008D
+S _IT0 Def0088
+S _EX0 Def00A8
+S _IE Def00A8
+S _IT1 Def008A
+S _TB8 Def009B
+S _EX1 Def00AA
+S _RXD Def00B0
+S G$INT0$0$0 Def00B2
+S G$INT1$0$0 Def00B3
+S G$DPH$0$0 Def0083
+S _TL0 Def008A
+S _SM0 Def009F
+S _TXD Def00B1
+S _TL1 Def008B
+S _SM1 Def009E
+S G$IE0$0$0 Def0089
+S _SM2 Def009D
+S _FL Def00D1
+S G$IE1$0$0 Def008B
+S G$DPL$0$0 Def0082
+S _PT0 Def00B9
+S _PT1 Def00BB
+S _RS0 Def00D3
+S _TR0 Def008C
+S _RD Def00B7
+S _RS1 Def00D4
+S _F0 Def00D5
+S _TR1 Def008E
+S G$AC$0$0 Def00D6
+S _ES Def00AC
+S _PX0 Def00B8
+S G$REN$0$0 Def009C
+S _IP Def00B8
+S _PX1 Def00BA
+S G$EA$0$0 Def00AF
+S _PSW Def00D0
+S __sdcc_gsinit_startup Ref0000
+S _RI Def0098
+S _CY Def00D7
+S G$ET0$0$0 Def00A9
+S _TI Def0099
+S G$ET1$0$0 Def00AB
+S G$TF0$0$0 Def008D
+S G$TF1$0$0 Def008F
+S __mcs51_genXRAMCLEAR Ref0000
+S G$RB8$0$0 Def009A
+S G$TH0$0$0 Def008C
+S _P0 Def0080
+A _CODE size 0 flags 0 addr 0
+A RSEG size 0 flags 0 addr 0
+A REG_BANK_0 size 8 flags 4 addr 0
+A DSEG size 6 flags 0 addr 0
+S _i Def0004
+S G$some_variable$0$0 Def0000
+S G$i$0$0 Def0004
+S _some_variable Def0000
+A OSEG size 0 flags 4 addr 0
+A SSEG size 1 flags 0 addr 0
+S __start__stack Def0000
+A ISEG size 0 flags 0 addr 0
+A IABS size 0 flags 8 addr 0
+A BSEG size 0 flags 80 addr 0
+A PSEG size 0 flags 50 addr 0
+A XSEG size 0 flags 40 addr 0
+A XABS size 0 flags 48 addr 0
+A XISEG size 0 flags 40 addr 0
+A HOME size 8 flags 20 addr 0
+S __sdcc_program_startup Def0003
+S A$demo_c_0$415 Def0003
+S A$demo_c_0$417 Def0006
+S A$demo_c_0$385 Def0000
+A GSINIT0 size 0 flags 20 addr 0
+A GSINIT1 size 0 flags 20 addr 0
+A GSINIT2 size 0 flags 20 addr 0
+A GSINIT3 size 0 flags 20 addr 0
+A GSINIT4 size 0 flags 20 addr 0
+A GSINIT5 size 0 flags 20 addr 0
+A GSINIT size 9 flags 20 addr 0
+S A$demo_c_0$402 Def0000
+S A$demo_c_0$403 Def0001
+S A$demo_c_0$404 Def0003
+S A$demo_c_0$405 Def0005
+S A$demo_c_0$406 Def0007
+S C$demo_c_0.c$10$1$1 Def0000
+A GSFINAL size 3 flags 20 addr 0
+S A$demo_c_0$408 Def0000
+A CSEG size 5C flags 20 addr 0
+S A$demo_c_0$494 Def002E
+S A$demo_c_0$485 Def0020
+S A$demo_c_0$476 Def0012
+S A$demo_c_0$449 Def0006
+S C$demo_c_0.c$40$1$1 Def005A
+S C$demo_c_0.c$31$1$1 Def000A
+S A$demo_c_0$495 Def0031
+S A$demo_c_0$486 Def0021
+S A$demo_c_0$477 Def0014
+S C$demo_c_0.c$41$1$1 Def005A
+S C$demo_c_0.c$23$1$1 Def0002
+S A$demo_c_0$496 Def0033
+S A$demo_c_0$487 Def0023
+S A$demo_c_0$478 Def0016
+S C$demo_c_0.c$24$1$1 Def0004
+S A$demo_c_0$497 Def0036
+S A$demo_c_0$479 Def0018
+S C$demo_c_0.c$32$2$2 Def0038
+S C$demo_c_0.c$25$1$1 Def0009
+S _main Def000A
+S XG$someFunction$0$0 Def0009
+S C$demo_c_0.c$33$3$3 Def001C
+S C$demo_c_0.c$28$1$1 Def000A
+S C$demo_c_0.c$36$2$2 Def0042
+S C$demo_c_0.c$34$3$3 Def0026
+S G$someFunction$0$0 Def0000
+S XG$main$0$0 Def005A
+S G$main$0$0 Def000A
+S A$demo_c_0$510 Def0044
+S A$demo_c_0$501 Def0038
+S A$demo_c_0$520 Def0058
+S A$demo_c_0$511 Def0046
+S A$demo_c_0$502 Def003A
+S A$demo_c_0$512 Def0048
+S A$demo_c_0$503 Def003B
+S A$demo_c_0$513 Def004A
+S A$demo_c_0$504 Def003E
+S A$demo_c_0$450 Def0007
+S A$demo_c_0$514 Def004C
+S A$demo_c_0$505 Def0040
+S A$demo_c_0$442 Def0000
+S _someFunction Def0000
+S A$demo_c_0$515 Def004E
+S A$demo_c_0$470 Def000A
+S A$demo_c_0$525 Def005A
+S A$demo_c_0$516 Def0050
+S A$demo_c_0$480 Def001A
+S A$demo_c_0$471 Def000B
+S A$demo_c_0$453 Def0009
+S A$demo_c_0$517 Def0052
+S A$demo_c_0$490 Def0026
+S A$demo_c_0$472 Def000D
+S A$demo_c_0$445 Def0002
+S C$demo_c_0.c$20$0$0 Def0000
+S A$demo_c_0$518 Def0054
+S A$demo_c_0$509 Def0042
+S A$demo_c_0$491 Def0028
+S A$demo_c_0$519 Def0056
+S A$demo_c_0$492 Def0029
+S A$demo_c_0$483 Def001C
+S A$demo_c_0$474 Def000F
+S A$demo_c_0$493 Def002C
+S A$demo_c_0$484 Def001E
+S A$demo_c_0$475 Def0010
+S A$demo_c_0$448 Def0004
+A CONST size 0 flags 20 addr 0
+A XINIT size 0 flags 20 addr 0
+A CABS size 0 flags 28 addr 0
+T 00 00
+R 00 00 00 02
+T 00 00
+R 00 00 00 03
+T 00 00
+R 00 00 00 03
+T 00 04
+R 00 00 00 03
+T 00 04
+R 00 00 00 03
+T 00 00
+R 00 00 00 05
+T 00 00
+R 00 00 00 05
+T 00 00
+R 00 00 00 0D
+T 00 00 02 00 00
+R 00 00 00 0D 02 03 00 BA
+T 00 00 E4 F5 00 00 00 F5 00 00 01 F5
+R 00 00 00 14 F1 21 04 00 03 F1 21 08 00 03
+T 00 06 00 00 02 F5 00 00 03
+R 00 00 00 14 F1 21 02 00 03 F1 21 06 00 03
+T 00 00 02 00 03
+R 00 00 00 15 00 03 00 0D
+T 00 03
+R 00 00 00 0D
+T 00 03 12 00 0A 80 FE
+R 00 00 00 0D 00 03 00 16
+T 00 00
+R 00 00 00 16
+T 00 00 AA 82 8A 90 74 FF 6A F5 B0 22
+R 00 00 00 16
+T 00 0A
+R 00 00 00 16
+T 00 0A
+R 00 00 00 16
+T 00 0A E4 F5 00 00 04 F5 00 00 05
+R 00 00 00 16 F1 21 04 00 03 F1 21 08 00 03
+T 00 0F
+R 00 00 00 16
+T 00 0F C3 E5 00 00 04 94 FF E5 00 00 05 64 80 94
+R 00 00 00 16 F1 21 04 00 03 F1 21 0A 00 03
+T 00 19 80 50 26 AA 00 00 04 74 02 2A F5 82 12
+R 00 00 00 16 F1 21 06 00 03
+T 00 24 00 00 05 00 00 00 E4 B5
+R 00 00 00 16 00 02 00 16 F1 21 05 00 03
+T 00 2A 00 00 00 0C 05 00 00 01 B5
+R 00 00 00 16 F1 21 02 00 03 F1 21 07 00 03
+T 00 2F 00 00 01 07 05 00 00 02 B5
+R 00 00 00 16 F1 21 02 00 03 F1 21 07 00 03
+T 00 34 00 00 02 02 05 00 00 03
+R 00 00 00 16 F1 21 02 00 03 F1 21 07 00 03
+T 00 38
+R 00 00 00 16
+T 00 38 05 00 00 04 E4 B5 00 00 04 D1 05
+R 00 00 00 16 F1 21 03 00 03 F1 21 08 00 03
+T 00 3F 00 00 05 80 CD
+R 00 00 00 16 F1 21 02 00 03
+T 00 42
+R 00 00 00 16
+T 00 42 E5 00 00 00 24 EA F5 00 00 00 E5
+R 00 00 00 16 F1 21 03 00 03 F1 21 09 00 03
+T 00 49 00 00 01 34 FF F5 00 00 01 E5
+R 00 00 00 16 F1 21 02 00 03 F1 21 08 00 03
+T 00 4F 00 00 02 34 FF F5 00 00 02 E5
+R 00 00 00 16 F1 21 02 00 03 F1 21 08 00 03
+T 00 55 00 00 03 34 FF F5 00 00 03 80 AE
+R 00 00 00 16 F1 21 02 00 03 F1 21 08 00 03
diff --git a/demo/demo_c_0.rst b/demo/demo_c_0.rst
new file mode 100644
index 0000000..cc9b36a
--- /dev/null
+++ b/demo/demo_c_0.rst
@@ -0,0 +1,529 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+ 4 ; This file was generated Tue Oct 27 23:03:10 2009
+ 5 ;--------------------------------------------------------
+ 6 .module demo_c_0
+ 7 .optsdcc -mmcs51 --model-small
+ 8
+ 9 ;--------------------------------------------------------
+ 10 ; Public variables in this module
+ 11 ;--------------------------------------------------------
+ 12 .globl _main
+ 13 .globl _someFunction
+ 14 .globl _CY
+ 15 .globl _AC
+ 16 .globl _F0
+ 17 .globl _RS1
+ 18 .globl _RS0
+ 19 .globl _OV
+ 20 .globl _FL
+ 21 .globl _P
+ 22 .globl _PS
+ 23 .globl _PT1
+ 24 .globl _PX1
+ 25 .globl _PT0
+ 26 .globl _PX0
+ 27 .globl _RD
+ 28 .globl _WR
+ 29 .globl _T1
+ 30 .globl _T0
+ 31 .globl _INT1
+ 32 .globl _INT0
+ 33 .globl _TXD
+ 34 .globl _RXD
+ 35 .globl _P3_7
+ 36 .globl _P3_6
+ 37 .globl _P3_5
+ 38 .globl _P3_4
+ 39 .globl _P3_3
+ 40 .globl _P3_2
+ 41 .globl _P3_1
+ 42 .globl _P3_0
+ 43 .globl _EA
+ 44 .globl _ES
+ 45 .globl _ET1
+ 46 .globl _EX1
+ 47 .globl _ET0
+ 48 .globl _EX0
+ 49 .globl _P2_7
+ 50 .globl _P2_6
+ 51 .globl _P2_5
+ 52 .globl _P2_4
+ 53 .globl _P2_3
+ 54 .globl _P2_2
+ 55 .globl _P2_1
+ 56 .globl _P2_0
+ 57 .globl _SM0
+ 58 .globl _SM1
+ 59 .globl _SM2
+ 60 .globl _REN
+ 61 .globl _TB8
+ 62 .globl _RB8
+ 63 .globl _TI
+ 64 .globl _RI
+ 65 .globl _P1_7
+ 66 .globl _P1_6
+ 67 .globl _P1_5
+ 68 .globl _P1_4
+ 69 .globl _P1_3
+ 70 .globl _P1_2
+ 71 .globl _P1_1
+ 72 .globl _P1_0
+ 73 .globl _TF1
+ 74 .globl _TR1
+ 75 .globl _TF0
+ 76 .globl _TR0
+ 77 .globl _IE1
+ 78 .globl _IT1
+ 79 .globl _IE0
+ 80 .globl _IT0
+ 81 .globl _P0_7
+ 82 .globl _P0_6
+ 83 .globl _P0_5
+ 84 .globl _P0_4
+ 85 .globl _P0_3
+ 86 .globl _P0_2
+ 87 .globl _P0_1
+ 88 .globl _P0_0
+ 89 .globl _B
+ 90 .globl _A
+ 91 .globl _ACC
+ 92 .globl _PSW
+ 93 .globl _IP
+ 94 .globl _P3
+ 95 .globl _IE
+ 96 .globl _P2
+ 97 .globl _SBUF
+ 98 .globl _SCON
+ 99 .globl _P1
+ 100 .globl _TH1
+ 101 .globl _TH0
+ 102 .globl _TL1
+ 103 .globl _TL0
+ 104 .globl _TMOD
+ 105 .globl _TCON
+ 106 .globl _PCON
+ 107 .globl _DPH
+ 108 .globl _DPL
+ 109 .globl _SP
+ 110 .globl _P0
+ 111 .globl _i
+ 112 .globl _some_variable
+ 113 ;--------------------------------------------------------
+ 114 ; special function registers
+ 115 ;--------------------------------------------------------
+ 116 .area RSEG (DATA)
+ 0080 117 G$P0$0$0 == 0x0080
+ 0080 118 _P0 = 0x0080
+ 0081 119 G$SP$0$0 == 0x0081
+ 0081 120 _SP = 0x0081
+ 0082 121 G$DPL$0$0 == 0x0082
+ 0082 122 _DPL = 0x0082
+ 0083 123 G$DPH$0$0 == 0x0083
+ 0083 124 _DPH = 0x0083
+ 0087 125 G$PCON$0$0 == 0x0087
+ 0087 126 _PCON = 0x0087
+ 0088 127 G$TCON$0$0 == 0x0088
+ 0088 128 _TCON = 0x0088
+ 0089 129 G$TMOD$0$0 == 0x0089
+ 0089 130 _TMOD = 0x0089
+ 008A 131 G$TL0$0$0 == 0x008a
+ 008A 132 _TL0 = 0x008a
+ 008B 133 G$TL1$0$0 == 0x008b
+ 008B 134 _TL1 = 0x008b
+ 008C 135 G$TH0$0$0 == 0x008c
+ 008C 136 _TH0 = 0x008c
+ 008D 137 G$TH1$0$0 == 0x008d
+ 008D 138 _TH1 = 0x008d
+ 0090 139 G$P1$0$0 == 0x0090
+ 0090 140 _P1 = 0x0090
+ 0098 141 G$SCON$0$0 == 0x0098
+ 0098 142 _SCON = 0x0098
+ 0099 143 G$SBUF$0$0 == 0x0099
+ 0099 144 _SBUF = 0x0099
+ 00A0 145 G$P2$0$0 == 0x00a0
+ 00A0 146 _P2 = 0x00a0
+ 00A8 147 G$IE$0$0 == 0x00a8
+ 00A8 148 _IE = 0x00a8
+ 00B0 149 G$P3$0$0 == 0x00b0
+ 00B0 150 _P3 = 0x00b0
+ 00B8 151 G$IP$0$0 == 0x00b8
+ 00B8 152 _IP = 0x00b8
+ 00D0 153 G$PSW$0$0 == 0x00d0
+ 00D0 154 _PSW = 0x00d0
+ 00E0 155 G$ACC$0$0 == 0x00e0
+ 00E0 156 _ACC = 0x00e0
+ 00E0 157 G$A$0$0 == 0x00e0
+ 00E0 158 _A = 0x00e0
+ 00F0 159 G$B$0$0 == 0x00f0
+ 00F0 160 _B = 0x00f0
+ 161 ;--------------------------------------------------------
+ 162 ; special function bits
+ 163 ;--------------------------------------------------------
+ 164 .area RSEG (DATA)
+ 0080 165 G$P0_0$0$0 == 0x0080
+ 0080 166 _P0_0 = 0x0080
+ 0081 167 G$P0_1$0$0 == 0x0081
+ 0081 168 _P0_1 = 0x0081
+ 0082 169 G$P0_2$0$0 == 0x0082
+ 0082 170 _P0_2 = 0x0082
+ 0083 171 G$P0_3$0$0 == 0x0083
+ 0083 172 _P0_3 = 0x0083
+ 0084 173 G$P0_4$0$0 == 0x0084
+ 0084 174 _P0_4 = 0x0084
+ 0085 175 G$P0_5$0$0 == 0x0085
+ 0085 176 _P0_5 = 0x0085
+ 0086 177 G$P0_6$0$0 == 0x0086
+ 0086 178 _P0_6 = 0x0086
+ 0087 179 G$P0_7$0$0 == 0x0087
+ 0087 180 _P0_7 = 0x0087
+ 0088 181 G$IT0$0$0 == 0x0088
+ 0088 182 _IT0 = 0x0088
+ 0089 183 G$IE0$0$0 == 0x0089
+ 0089 184 _IE0 = 0x0089
+ 008A 185 G$IT1$0$0 == 0x008a
+ 008A 186 _IT1 = 0x008a
+ 008B 187 G$IE1$0$0 == 0x008b
+ 008B 188 _IE1 = 0x008b
+ 008C 189 G$TR0$0$0 == 0x008c
+ 008C 190 _TR0 = 0x008c
+ 008D 191 G$TF0$0$0 == 0x008d
+ 008D 192 _TF0 = 0x008d
+ 008E 193 G$TR1$0$0 == 0x008e
+ 008E 194 _TR1 = 0x008e
+ 008F 195 G$TF1$0$0 == 0x008f
+ 008F 196 _TF1 = 0x008f
+ 0090 197 G$P1_0$0$0 == 0x0090
+ 0090 198 _P1_0 = 0x0090
+ 0091 199 G$P1_1$0$0 == 0x0091
+ 0091 200 _P1_1 = 0x0091
+ 0092 201 G$P1_2$0$0 == 0x0092
+ 0092 202 _P1_2 = 0x0092
+ 0093 203 G$P1_3$0$0 == 0x0093
+ 0093 204 _P1_3 = 0x0093
+ 0094 205 G$P1_4$0$0 == 0x0094
+ 0094 206 _P1_4 = 0x0094
+ 0095 207 G$P1_5$0$0 == 0x0095
+ 0095 208 _P1_5 = 0x0095
+ 0096 209 G$P1_6$0$0 == 0x0096
+ 0096 210 _P1_6 = 0x0096
+ 0097 211 G$P1_7$0$0 == 0x0097
+ 0097 212 _P1_7 = 0x0097
+ 0098 213 G$RI$0$0 == 0x0098
+ 0098 214 _RI = 0x0098
+ 0099 215 G$TI$0$0 == 0x0099
+ 0099 216 _TI = 0x0099
+ 009A 217 G$RB8$0$0 == 0x009a
+ 009A 218 _RB8 = 0x009a
+ 009B 219 G$TB8$0$0 == 0x009b
+ 009B 220 _TB8 = 0x009b
+ 009C 221 G$REN$0$0 == 0x009c
+ 009C 222 _REN = 0x009c
+ 009D 223 G$SM2$0$0 == 0x009d
+ 009D 224 _SM2 = 0x009d
+ 009E 225 G$SM1$0$0 == 0x009e
+ 009E 226 _SM1 = 0x009e
+ 009F 227 G$SM0$0$0 == 0x009f
+ 009F 228 _SM0 = 0x009f
+ 00A0 229 G$P2_0$0$0 == 0x00a0
+ 00A0 230 _P2_0 = 0x00a0
+ 00A1 231 G$P2_1$0$0 == 0x00a1
+ 00A1 232 _P2_1 = 0x00a1
+ 00A2 233 G$P2_2$0$0 == 0x00a2
+ 00A2 234 _P2_2 = 0x00a2
+ 00A3 235 G$P2_3$0$0 == 0x00a3
+ 00A3 236 _P2_3 = 0x00a3
+ 00A4 237 G$P2_4$0$0 == 0x00a4
+ 00A4 238 _P2_4 = 0x00a4
+ 00A5 239 G$P2_5$0$0 == 0x00a5
+ 00A5 240 _P2_5 = 0x00a5
+ 00A6 241 G$P2_6$0$0 == 0x00a6
+ 00A6 242 _P2_6 = 0x00a6
+ 00A7 243 G$P2_7$0$0 == 0x00a7
+ 00A7 244 _P2_7 = 0x00a7
+ 00A8 245 G$EX0$0$0 == 0x00a8
+ 00A8 246 _EX0 = 0x00a8
+ 00A9 247 G$ET0$0$0 == 0x00a9
+ 00A9 248 _ET0 = 0x00a9
+ 00AA 249 G$EX1$0$0 == 0x00aa
+ 00AA 250 _EX1 = 0x00aa
+ 00AB 251 G$ET1$0$0 == 0x00ab
+ 00AB 252 _ET1 = 0x00ab
+ 00AC 253 G$ES$0$0 == 0x00ac
+ 00AC 254 _ES = 0x00ac
+ 00AF 255 G$EA$0$0 == 0x00af
+ 00AF 256 _EA = 0x00af
+ 00B0 257 G$P3_0$0$0 == 0x00b0
+ 00B0 258 _P3_0 = 0x00b0
+ 00B1 259 G$P3_1$0$0 == 0x00b1
+ 00B1 260 _P3_1 = 0x00b1
+ 00B2 261 G$P3_2$0$0 == 0x00b2
+ 00B2 262 _P3_2 = 0x00b2
+ 00B3 263 G$P3_3$0$0 == 0x00b3
+ 00B3 264 _P3_3 = 0x00b3
+ 00B4 265 G$P3_4$0$0 == 0x00b4
+ 00B4 266 _P3_4 = 0x00b4
+ 00B5 267 G$P3_5$0$0 == 0x00b5
+ 00B5 268 _P3_5 = 0x00b5
+ 00B6 269 G$P3_6$0$0 == 0x00b6
+ 00B6 270 _P3_6 = 0x00b6
+ 00B7 271 G$P3_7$0$0 == 0x00b7
+ 00B7 272 _P3_7 = 0x00b7
+ 00B0 273 G$RXD$0$0 == 0x00b0
+ 00B0 274 _RXD = 0x00b0
+ 00B1 275 G$TXD$0$0 == 0x00b1
+ 00B1 276 _TXD = 0x00b1
+ 00B2 277 G$INT0$0$0 == 0x00b2
+ 00B2 278 _INT0 = 0x00b2
+ 00B3 279 G$INT1$0$0 == 0x00b3
+ 00B3 280 _INT1 = 0x00b3
+ 00B4 281 G$T0$0$0 == 0x00b4
+ 00B4 282 _T0 = 0x00b4
+ 00B5 283 G$T1$0$0 == 0x00b5
+ 00B5 284 _T1 = 0x00b5
+ 00B6 285 G$WR$0$0 == 0x00b6
+ 00B6 286 _WR = 0x00b6
+ 00B7 287 G$RD$0$0 == 0x00b7
+ 00B7 288 _RD = 0x00b7
+ 00B8 289 G$PX0$0$0 == 0x00b8
+ 00B8 290 _PX0 = 0x00b8
+ 00B9 291 G$PT0$0$0 == 0x00b9
+ 00B9 292 _PT0 = 0x00b9
+ 00BA 293 G$PX1$0$0 == 0x00ba
+ 00BA 294 _PX1 = 0x00ba
+ 00BB 295 G$PT1$0$0 == 0x00bb
+ 00BB 296 _PT1 = 0x00bb
+ 00BC 297 G$PS$0$0 == 0x00bc
+ 00BC 298 _PS = 0x00bc
+ 00D0 299 G$P$0$0 == 0x00d0
+ 00D0 300 _P = 0x00d0
+ 00D1 301 G$FL$0$0 == 0x00d1
+ 00D1 302 _FL = 0x00d1
+ 00D2 303 G$OV$0$0 == 0x00d2
+ 00D2 304 _OV = 0x00d2
+ 00D3 305 G$RS0$0$0 == 0x00d3
+ 00D3 306 _RS0 = 0x00d3
+ 00D4 307 G$RS1$0$0 == 0x00d4
+ 00D4 308 _RS1 = 0x00d4
+ 00D5 309 G$F0$0$0 == 0x00d5
+ 00D5 310 _F0 = 0x00d5
+ 00D6 311 G$AC$0$0 == 0x00d6
+ 00D6 312 _AC = 0x00d6
+ 00D7 313 G$CY$0$0 == 0x00d7
+ 00D7 314 _CY = 0x00d7
+ 315 ;--------------------------------------------------------
+ 316 ; overlayable register banks
+ 317 ;--------------------------------------------------------
+ 318 .area REG_BANK_0 (REL,OVR,DATA)
+ 0000 319 .ds 8
+ 320 ;--------------------------------------------------------
+ 321 ; internal ram data
+ 322 ;--------------------------------------------------------
+ 323 .area DSEG (DATA)
+ 0000 324 G$some_variable$0$0==.
+ 0008 325 _some_variable::
+ 0008 326 .ds 4
+ 0004 327 G$i$0$0==.
+ 000C 328 _i::
+ 000C 329 .ds 2
+ 330 ;--------------------------------------------------------
+ 331 ; overlayable items in internal ram
+ 332 ;--------------------------------------------------------
+ 333 .area OSEG (OVR,DATA)
+ 334 ;--------------------------------------------------------
+ 335 ; Stack segment in internal ram
+ 336 ;--------------------------------------------------------
+ 337 .area SSEG (DATA)
+ 000E 338 __start__stack:
+ 000E 339 .ds 1
+ 340
+ 341 ;--------------------------------------------------------
+ 342 ; indirectly addressable internal ram data
+ 343 ;--------------------------------------------------------
+ 344 .area ISEG (DATA)
+ 345 ;--------------------------------------------------------
+ 346 ; absolute internal ram data
+ 347 ;--------------------------------------------------------
+ 348 .area IABS (ABS,DATA)
+ 349 .area IABS (ABS,DATA)
+ 350 ;--------------------------------------------------------
+ 351 ; bit data
+ 352 ;--------------------------------------------------------
+ 353 .area BSEG (BIT)
+ 354 ;--------------------------------------------------------
+ 355 ; paged external ram data
+ 356 ;--------------------------------------------------------
+ 357 .area PSEG (PAG,XDATA)
+ 358 ;--------------------------------------------------------
+ 359 ; external ram data
+ 360 ;--------------------------------------------------------
+ 361 .area XSEG (XDATA)
+ 362 ;--------------------------------------------------------
+ 363 ; absolute external ram data
+ 364 ;--------------------------------------------------------
+ 365 .area XABS (ABS,XDATA)
+ 366 ;--------------------------------------------------------
+ 367 ; external initialized ram data
+ 368 ;--------------------------------------------------------
+ 369 .area XISEG (XDATA)
+ 370 .area HOME (CODE)
+ 371 .area GSINIT0 (CODE)
+ 372 .area GSINIT1 (CODE)
+ 373 .area GSINIT2 (CODE)
+ 374 .area GSINIT3 (CODE)
+ 375 .area GSINIT4 (CODE)
+ 376 .area GSINIT5 (CODE)
+ 377 .area GSINIT (CODE)
+ 378 .area GSFINAL (CODE)
+ 379 .area CSEG (CODE)
+ 380 ;--------------------------------------------------------
+ 381 ; interrupt vector
+ 382 ;--------------------------------------------------------
+ 383 .area HOME (CODE)
+ 0000 384 __interrupt_vect:
+ 0000 02 00 08 385 ljmp __sdcc_gsinit_startup
+ 386 ;--------------------------------------------------------
+ 387 ; global & static initialisations
+ 388 ;--------------------------------------------------------
+ 389 .area HOME (CODE)
+ 390 .area GSINIT (CODE)
+ 391 .area GSFINAL (CODE)
+ 392 .area GSINIT (CODE)
+ 393 .globl __sdcc_gsinit_startup
+ 394 .globl __sdcc_program_startup
+ 395 .globl __start__stack
+ 396 .globl __mcs51_genXINIT
+ 397 .globl __mcs51_genXRAMCLEAR
+ 398 .globl __mcs51_genRAMCLEAR
+ 0000 399 G$main$0$0 ==.
+ 0000 400 C$demo_c_0.c$10$1$1 ==.
+ 401 ; demo_c_0.c:10: unsigned long some_variable=0; ///< Documentation for this variable comes here
+ 0061 E4 402 clr a
+ 0062 F5 08 403 mov _some_variable,a
+ 0064 F5 09 404 mov (_some_variable + 1),a
+ 0066 F5 0A 405 mov (_some_variable + 2),a
+ 0068 F5 0B 406 mov (_some_variable + 3),a
+ 407 .area GSFINAL (CODE)
+ 006A 02 00 03 408 ljmp __sdcc_program_startup
+ 409 ;--------------------------------------------------------
+ 410 ; Home
+ 411 ;--------------------------------------------------------
+ 412 .area HOME (CODE)
+ 413 .area HOME (CODE)
+ 0003 414 __sdcc_program_startup:
+ 0003 12 00 77 415 lcall _main
+ 416 ; return from main will lock up
+ 0006 80 FE 417 sjmp .
+ 418 ;--------------------------------------------------------
+ 419 ; code
+ 420 ;--------------------------------------------------------
+ 421 .area CSEG (CODE)
+ 422 ;------------------------------------------------------------
+ 423 ;Allocation info for local variables in function 'someFunction'
+ 424 ;------------------------------------------------------------
+ 425 ;somevalue Allocated to registers r2
+ 426 ;------------------------------------------------------------
+ 0000 427 G$someFunction$0$0 ==.
+ 0000 428 C$demo_c_0.c$20$0$0 ==.
+ 429 ; demo_c_0.c:20: void someFunction(unsigned char somevalue)
+ 430 ; -----------------------------------------
+ 431 ; function someFunction
+ 432 ; -----------------------------------------
+ 006D 433 _someFunction:
+ 0002 434 ar2 = 0x02
+ 0003 435 ar3 = 0x03
+ 0004 436 ar4 = 0x04
+ 0005 437 ar5 = 0x05
+ 0006 438 ar6 = 0x06
+ 0007 439 ar7 = 0x07
+ 0000 440 ar0 = 0x00
+ 0001 441 ar1 = 0x01
+ 006D AA 82 442 mov r2,dpl
+ 0002 443 C$demo_c_0.c$23$1$1 ==.
+ 444 ; demo_c_0.c:23: P1=somevalue;
+ 006F 8A 90 445 mov _P1,r2
+ 0004 446 C$demo_c_0.c$24$1$1 ==.
+ 447 ; demo_c_0.c:24: P3=somevalue^0xFF;
+ 0071 74 FF 448 mov a,#0xFF
+ 0073 6A 449 xrl a,r2
+ 0074 F5 B0 450 mov _P3,a
+ 0009 451 C$demo_c_0.c$25$1$1 ==.
+ 0009 452 XG$someFunction$0$0 ==.
+ 0076 22 453 ret
+ 454 ;------------------------------------------------------------
+ 455 ;Allocation info for local variables in function 'main'
+ 456 ;------------------------------------------------------------
+ 457 ;------------------------------------------------------------
+ 000A 458 G$main$0$0 ==.
+ 000A 459 C$demo_c_0.c$28$1$1 ==.
+ 460 ; demo_c_0.c:28: int main()
+ 461 ; -----------------------------------------
+ 462 ; function main
+ 463 ; -----------------------------------------
+ 0077 464 _main:
+ 000A 465 C$demo_c_0.c$31$1$1 ==.
+ 466 ; demo_c_0.c:31: while(1) {
+ 0077 467 00102$:
+ 000A 468 C$demo_c_0.c$32$2$2 ==.
+ 469 ; demo_c_0.c:32: for(i=0; i<255; i++) {
+ 0077 E4 470 clr a
+ 0078 F5 0C 471 mov _i,a
+ 007A F5 0D 472 mov (_i + 1),a
+ 007C 473 00104$:
+ 007C C3 474 clr c
+ 007D E5 0C 475 mov a,_i
+ 007F 94 FF 476 subb a,#0xFF
+ 0081 E5 0D 477 mov a,(_i + 1)
+ 0083 64 80 478 xrl a,#0x80
+ 0085 94 80 479 subb a,#0x80
+ 0087 50 26 480 jnc 00107$
+ 001C 481 C$demo_c_0.c$33$3$3 ==.
+ 482 ; demo_c_0.c:33: someFunction(i+2);
+ 0089 AA 0C 483 mov r2,_i
+ 008B 74 02 484 mov a,#0x02
+ 008D 2A 485 add a,r2
+ 008E F5 82 486 mov dpl,a
+ 0090 12 00 6D 487 lcall _someFunction
+ 0026 488 C$demo_c_0.c$34$3$3 ==.
+ 489 ; demo_c_0.c:34: some_variable++;
+ 0093 05 08 490 inc _some_variable
+ 0095 E4 491 clr a
+ 0096 B5 08 0C 492 cjne a,_some_variable,00114$
+ 0099 05 09 493 inc (_some_variable + 1)
+ 009B B5 09 07 494 cjne a,(_some_variable + 1),00114$
+ 009E 05 0A 495 inc (_some_variable + 2)
+ 00A0 B5 0A 02 496 cjne a,(_some_variable + 2),00114$
+ 00A3 05 0B 497 inc (_some_variable + 3)
+ 00A5 498 00114$:
+ 0038 499 C$demo_c_0.c$32$2$2 ==.
+ 500 ; demo_c_0.c:32: for(i=0; i<255; i++) {
+ 00A5 05 0C 501 inc _i
+ 00A7 E4 502 clr a
+ 00A8 B5 0C D1 503 cjne a,_i,00104$
+ 00AB 05 0D 504 inc (_i + 1)
+ 00AD 80 CD 505 sjmp 00104$
+ 00AF 506 00107$:
+ 0042 507 C$demo_c_0.c$36$2$2 ==.
+ 508 ; demo_c_0.c:36: some_variable-=22;
+ 00AF E5 08 509 mov a,_some_variable
+ 00B1 24 EA 510 add a,#0xea
+ 00B3 F5 08 511 mov _some_variable,a
+ 00B5 E5 09 512 mov a,(_some_variable + 1)
+ 00B7 34 FF 513 addc a,#0xff
+ 00B9 F5 09 514 mov (_some_variable + 1),a
+ 00BB E5 0A 515 mov a,(_some_variable + 2)
+ 00BD 34 FF 516 addc a,#0xff
+ 00BF F5 0A 517 mov (_some_variable + 2),a
+ 00C1 E5 0B 518 mov a,(_some_variable + 3)
+ 00C3 34 FF 519 addc a,#0xff
+ 00C5 F5 0B 520 mov (_some_variable + 3),a
+ 005A 521 C$demo_c_0.c$40$1$1 ==.
+ 522 ; demo_c_0.c:40: return 0;
+ 005A 523 C$demo_c_0.c$41$1$1 ==.
+ 005A 524 XG$main$0$0 ==.
+ 00C7 80 AE 525 sjmp 00102$
+ 526 .area CSEG (CODE)
+ 527 .area CONST (CODE)
+ 528 .area XINIT (CODE)
+ 529 .area CABS (ABS,CODE)
diff --git a/demo/demo_c_0.sym b/demo/demo_c_0.sym
new file mode 100644
index 0000000..9d943ba
--- /dev/null
+++ b/demo/demo_c_0.sym
@@ -0,0 +1,659 @@
+ ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1.
+
+Symbol Table
+
+ A 00D6
+ D A$demo_c_0$385 0000 GR
+ 14 A$demo_c_0$402 0000 GR
+ 14 A$demo_c_0$403 0001 GR
+ 14 A$demo_c_0$404 0003 GR
+ 14 A$demo_c_0$405 0005 GR
+ 14 A$demo_c_0$406 0007 GR
+ 15 A$demo_c_0$408 0000 GR
+ D A$demo_c_0$415 0003 GR
+ D A$demo_c_0$417 0006 GR
+ 16 A$demo_c_0$442 0000 GR
+ 16 A$demo_c_0$445 0002 GR
+ 16 A$demo_c_0$448 0004 GR
+ 16 A$demo_c_0$449 0006 GR
+ 16 A$demo_c_0$450 0007 GR
+ 16 A$demo_c_0$453 0009 GR
+ 16 A$demo_c_0$470 000A GR
+ 16 A$demo_c_0$471 000B GR
+ 16 A$demo_c_0$472 000D GR
+ 16 A$demo_c_0$474 000F GR
+ 16 A$demo_c_0$475 0010 GR
+ 16 A$demo_c_0$476 0012 GR
+ 16 A$demo_c_0$477 0014 GR
+ 16 A$demo_c_0$478 0016 GR
+ 16 A$demo_c_0$479 0018 GR
+ 16 A$demo_c_0$480 001A GR
+ 16 A$demo_c_0$483 001C GR
+ 16 A$demo_c_0$484 001E GR
+ 16 A$demo_c_0$485 0020 GR
+ 16 A$demo_c_0$486 0021 GR
+ 16 A$demo_c_0$487 0023 GR
+ 16 A$demo_c_0$490 0026 GR
+ 16 A$demo_c_0$491 0028 GR
+ 16 A$demo_c_0$492 0029 GR
+ 16 A$demo_c_0$493 002C GR
+ 16 A$demo_c_0$494 002E GR
+ 16 A$demo_c_0$495 0031 GR
+ 16 A$demo_c_0$496 0033 GR
+ 16 A$demo_c_0$497 0036 GR
+ 16 A$demo_c_0$501 0038 GR
+ 16 A$demo_c_0$502 003A GR
+ 16 A$demo_c_0$503 003B GR
+ 16 A$demo_c_0$504 003E GR
+ 16 A$demo_c_0$505 0040 GR
+ 16 A$demo_c_0$509 0042 GR
+ 16 A$demo_c_0$510 0044 GR
+ 16 A$demo_c_0$511 0046 GR
+ 16 A$demo_c_0$512 0048 GR
+ 16 A$demo_c_0$513 004A GR
+ 16 A$demo_c_0$514 004C GR
+ 16 A$demo_c_0$515 004E GR
+ 16 A$demo_c_0$516 0050 GR
+ 16 A$demo_c_0$517 0052 GR
+ 16 A$demo_c_0$518 0054 GR
+ 16 A$demo_c_0$519 0056 GR
+ 16 A$demo_c_0$520 0058 GR
+ 16 A$demo_c_0$525 005A GR
+ AC 00D6
+ ACC 00E0
+ ACC.0 00E0
+ ACC.1 00E1
+ ACC.2 00E2
+ ACC.3 00E3
+ ACC.4 00E4
+ ACC.5 00E5
+ ACC.6 00E6
+ ACC.7 00E7
+ B 00F0
+ B.0 00F0
+ B.1 00F1
+ B.2 00F2
+ B.3 00F3
+ B.4 00F4
+ B.5 00F5
+ B.6 00F6
+ B.7 00F7
+ 14 C$demo_c_0.c$10$1$1 = 0000 GR
+ 16 C$demo_c_0.c$20$0$0 = 0000 GR
+ 16 C$demo_c_0.c$23$1$1 = 0002 GR
+ 16 C$demo_c_0.c$24$1$1 = 0004 GR
+ 16 C$demo_c_0.c$25$1$1 = 0009 GR
+ 16 C$demo_c_0.c$28$1$1 = 000A GR
+ 16 C$demo_c_0.c$31$1$1 = 000A GR
+ 16 C$demo_c_0.c$32$2$2 = 0038 GR
+ 16 C$demo_c_0.c$33$3$3 = 001C GR
+ 16 C$demo_c_0.c$34$3$3 = 0026 GR
+ 16 C$demo_c_0.c$36$2$2 = 0042 GR
+ 16 C$demo_c_0.c$40$1$1 = 005A GR
+ 16 C$demo_c_0.c$41$1$1 = 005A GR
+ CPRL2 00C8
+ CT2 00C9
+ CY 00D7
+ DPH 0083
+ DPL 0082
+ EA 00AF
+ ES 00AC
+ ET0 00A9
+ ET1 00AB
+ ET2 00AD
+ EX0 00A8
+ EX1 00AA
+ EXEN2 00CB
+ EXF2 00CE
+ F0 00D5
+ G$A$0$0 = 00E0 G
+ G$AC$0$0 = 00D6 G
+ G$ACC$0$0 = 00E0 G
+ G$B$0$0 = 00F0 G
+ G$CY$0$0 = 00D7 G
+ G$DPH$0$0 = 0083 G
+ G$DPL$0$0 = 0082 G
+ G$EA$0$0 = 00AF G
+ G$ES$0$0 = 00AC G
+ G$ET0$0$0 = 00A9 G
+ G$ET1$0$0 = 00AB G
+ G$EX0$0$0 = 00A8 G
+ G$EX1$0$0 = 00AA G
+ G$F0$0$0 = 00D5 G
+ G$FL$0$0 = 00D1 G
+ G$IE$0$0 = 00A8 G
+ G$IE0$0$0 = 0089 G
+ G$IE1$0$0 = 008B G
+ G$INT0$0$0 = 00B2 G
+ G$INT1$0$0 = 00B3 G
+ G$IP$0$0 = 00B8 G
+ G$IT0$0$0 = 0088 G
+ G$IT1$0$0 = 008A G
+ G$OV$0$0 = 00D2 G
+ G$P$0$0 = 00D0 G
+ G$P0$0$0 = 0080 G
+ G$P0_0$0$0 = 0080 G
+ G$P0_1$0$0 = 0081 G
+ G$P0_2$0$0 = 0082 G
+ G$P0_3$0$0 = 0083 G
+ G$P0_4$0$0 = 0084 G
+ G$P0_5$0$0 = 0085 G
+ G$P0_6$0$0 = 0086 G
+ G$P0_7$0$0 = 0087 G
+ G$P1$0$0 = 0090 G
+ G$P1_0$0$0 = 0090 G
+ G$P1_1$0$0 = 0091 G
+ G$P1_2$0$0 = 0092 G
+ G$P1_3$0$0 = 0093 G
+ G$P1_4$0$0 = 0094 G
+ G$P1_5$0$0 = 0095 G
+ G$P1_6$0$0 = 0096 G
+ G$P1_7$0$0 = 0097 G
+ G$P2$0$0 = 00A0 G
+ G$P2_0$0$0 = 00A0 G
+ G$P2_1$0$0 = 00A1 G
+ G$P2_2$0$0 = 00A2 G
+ G$P2_3$0$0 = 00A3 G
+ G$P2_4$0$0 = 00A4 G
+ G$P2_5$0$0 = 00A5 G
+ G$P2_6$0$0 = 00A6 G
+ G$P2_7$0$0 = 00A7 G
+ G$P3$0$0 = 00B0 G
+ G$P3_0$0$0 = 00B0 G
+ G$P3_1$0$0 = 00B1 G
+ G$P3_2$0$0 = 00B2 G
+ G$P3_3$0$0 = 00B3 G
+ G$P3_4$0$0 = 00B4 G
+ G$P3_5$0$0 = 00B5 G
+ G$P3_6$0$0 = 00B6 G
+ G$P3_7$0$0 = 00B7 G
+ G$PCON$0$0 = 0087 G
+ G$PS$0$0 = 00BC G
+ G$PSW$0$0 = 00D0 G
+ G$PT0$0$0 = 00B9 G
+ G$PT1$0$0 = 00BB G
+ G$PX0$0$0 = 00B8 G
+ G$PX1$0$0 = 00BA G
+ G$RB8$0$0 = 009A G
+ G$RD$0$0 = 00B7 G
+ G$REN$0$0 = 009C G
+ G$RI$0$0 = 0098 G
+ G$RS0$0$0 = 00D3 G
+ G$RS1$0$0 = 00D4 G
+ G$RXD$0$0 = 00B0 G
+ G$SBUF$0$0 = 0099 G
+ G$SCON$0$0 = 0098 G
+ G$SM0$0$0 = 009F G
+ G$SM1$0$0 = 009E G
+ G$SM2$0$0 = 009D G
+ G$SP$0$0 = 0081 G
+ G$T0$0$0 = 00B4 G
+ G$T1$0$0 = 00B5 G
+ G$TB8$0$0 = 009B G
+ G$TCON$0$0 = 0088 G
+ G$TF0$0$0 = 008D G
+ G$TF1$0$0 = 008F G
+ G$TH0$0$0 = 008C G
+ G$TH1$0$0 = 008D G
+ G$TI$0$0 = 0099 G
+ G$TL0$0$0 = 008A G
+ G$TL1$0$0 = 008B G
+ G$TMOD$0$0 = 0089 G
+ G$TR0$0$0 = 008C G
+ G$TR1$0$0 = 008E G
+ G$TXD$0$0 = 00B1 G
+ G$WR$0$0 = 00B6 G
+ 3 G$i$0$0 = 0004 GR
+ 16 G$main$0$0 = 000A GR
+ 16 G$someFunction$0$0 = 0000 GR
+ 3 G$some_variable$0$0 = 0000 GR
+ IE 00A8
+ IE.0 00A8
+ IE.1 00A9
+ IE.2 00AA
+ IE.3 00AB
+ IE.4 00AC
+ IE.5 00AD
+ IE.7 00AF
+ IE0 0089
+ IE1 008B
+ INT0 00B2
+ INT1 00B3
+ IP 00B8
+ IP.0 00B8
+ IP.1 00B9
+ IP.2 00BA
+ IP.3 00BB
+ IP.4 00BC
+ IP.5 00BD
+ IT0 0088
+ IT1 008A
+ OV 00D2
+ P 00D0
+ P0 0080
+ P0.0 0080
+ P0.1 0081
+ P0.2 0082
+ P0.3 0083
+ P0.4 0084
+ P0.5 0085
+ P0.6 0086
+ P0.7 0087
+ P1 0090
+ P1.0 0090
+ P1.1 0091
+ P1.2 0092
+ P1.3 0093
+ P1.4 0094
+ P1.5 0095
+ P1.6 0096
+ P1.7 0097
+ P2 00A0
+ P2.0 00A0
+ P2.1 00A1
+ P2.2 00A2
+ P2.3 00A3
+ P2.4 00A4
+ P2.5 00A5
+ P2.6 00A6
+ P2.7 00A7
+ P3 00B0
+ P3.0 00B0
+ P3.1 00B1
+ P3.2 00B2
+ P3.3 00B3
+ P3.4 00B4
+ P3.5 00B5
+ P3.6 00B6
+ P3.7 00B7
+ PCON 0087
+ PS 00BC
+ PSW 00D0
+ PSW.0 00D0
+ PSW.1 00D1
+ PSW.2 00D2
+ PSW.3 00D3
+ PSW.4 00D4
+ PSW.5 00D5
+ PSW.6 00D6
+ PSW.7 00D7
+ PT0 00B9
+ PT1 00BB
+ PT2 00BD
+ PX0 00B8
+ PX1 00BA
+ RB8 009A
+ RCAP2H 00CB
+ RCAP2L 00CA
+ RCLK 00CD
+ REN 009C
+ RI 0098
+ RS0 00D3
+ RS1 00D4
+ RXD 00B0
+ SBUF 0099
+ SCON 0098
+ SCON.0 0098
+ SCON.1 0099
+ SCON.2 009A
+ SCON.3 009B
+ SCON.4 009C
+ SCON.5 009D
+ SCON.6 009E
+ SCON.7 009F
+ SM0 009F
+ SM1 009E
+ SM2 009D
+ SP 0081
+ T2CON 00C8
+ T2CON.0 00C8
+ T2CON.1 00C9
+ T2CON.2 00CA
+ T2CON.3 00CB
+ T2CON.4 00CC
+ T2CON.5 00CD
+ T2CON.6 00CE
+ T2CON.7 00CF
+ TB8 009B
+ TCLK 00CC
+ TCON 0088
+ TCON.0 0088
+ TCON.1 0089
+ TCON.2 008A
+ TCON.3 008B
+ TCON.4 008C
+ TCON.5 008D
+ TCON.6 008E
+ TCON.7 008F
+ TF0 008D
+ TF1 008F
+ TF2 00CF
+ TH0 008C
+ TH1 008D
+ TH2 00CD
+ TI 0099
+ TL0 008A
+ TL1 008B
+ TL2 00CC
+ TMOD 0089
+ TR0 008C
+ TR1 008E
+ TR2 00CA
+ TXD 00B1
+ 16 XG$main$0$0 = 005A GR
+ 16 XG$someFunction$0$0 = 0009 GR
+ _A = 00E0 G
+ _AC = 00D6 G
+ _ACC = 00E0 G
+ _B = 00F0 G
+ _CY = 00D7 G
+ _DPH = 0083 G
+ _DPL = 0082 G
+ _EA = 00AF G
+ _ES = 00AC G
+ _ET0 = 00A9 G
+ _ET1 = 00AB G
+ _EX0 = 00A8 G
+ _EX1 = 00AA G
+ _F0 = 00D5 G
+ _FL = 00D1 G
+ _IE = 00A8 G
+ _IE0 = 0089 G
+ _IE1 = 008B G
+ _INT0 = 00B2 G
+ _INT1 = 00B3 G
+ _IP = 00B8 G
+ _IT0 = 0088 G
+ _IT1 = 008A G
+ _OV = 00D2 G
+ _P = 00D0 G
+ _P0 = 0080 G
+ _P0_0 = 0080 G
+ _P0_1 = 0081 G
+ _P0_2 = 0082 G
+ _P0_3 = 0083 G
+ _P0_4 = 0084 G
+ _P0_5 = 0085 G
+ _P0_6 = 0086 G
+ _P0_7 = 0087 G
+ _P1 = 0090 G
+ _P1_0 = 0090 G
+ _P1_1 = 0091 G
+ _P1_2 = 0092 G
+ _P1_3 = 0093 G
+ _P1_4 = 0094 G
+ _P1_5 = 0095 G
+ _P1_6 = 0096 G
+ _P1_7 = 0097 G
+ _P2 = 00A0 G
+ _P2_0 = 00A0 G
+ _P2_1 = 00A1 G
+ _P2_2 = 00A2 G
+ _P2_3 = 00A3 G
+ _P2_4 = 00A4 G
+ _P2_5 = 00A5 G
+ _P2_6 = 00A6 G
+ _P2_7 = 00A7 G
+ _P3 = 00B0 G
+ _P3_0 = 00B0 G
+ _P3_1 = 00B1 G
+ _P3_2 = 00B2 G
+ _P3_3 = 00B3 G
+ _P3_4 = 00B4 G
+ _P3_5 = 00B5 G
+ _P3_6 = 00B6 G
+ _P3_7 = 00B7 G
+ _PCON = 0087 G
+ _PS = 00BC G
+ _PSW = 00D0 G
+ _PT0 = 00B9 G
+ _PT1 = 00BB G
+ _PX0 = 00B8 G
+ _PX1 = 00BA G
+ _RB8 = 009A G
+ _RD = 00B7 G
+ _REN = 009C G
+ _RI = 0098 G
+ _RS0 = 00D3 G
+ _RS1 = 00D4 G
+ _RXD = 00B0 G
+ _SBUF = 0099 G
+ _SCON = 0098 G
+ _SM0 = 009F G
+ _SM1 = 009E G
+ _SM2 = 009D G
+ _SP = 0081 G
+ _T0 = 00B4 G
+ _T1 = 00B5 G
+ _TB8 = 009B G
+ _TCON = 0088 G
+ _TF0 = 008D G
+ _TF1 = 008F G
+ _TH0 = 008C G
+ _TH1 = 008D G
+ _TI = 0099 G
+ _TL0 = 008A G
+ _TL1 = 008B G
+ _TMOD = 0089 G
+ _TR0 = 008C G
+ _TR1 = 008E G
+ _TXD = 00B1 G
+ _WR = 00B6 G
+ D __interrupt_vect 0000 R
+ __mcs51_genRAMCLEAR **** GX
+ __mcs51_genXINIT **** GX
+ __mcs51_genXRAMCLEAR **** GX
+ __sdcc_gsinit_startup **** GX
+ D __sdcc_program_startup 0003 GR
+ 5 __start__stack 0000 GR
+ 3 _i 0004 GR
+ 16 _main 000A GR
+ 16 _someFunction 0000 GR
+ 3 _some_variable 0000 GR
+ a 00D6
+ ac 00D6
+ acc 00E0
+ acc.0 00E0
+ acc.1 00E1
+ acc.2 00E2
+ acc.3 00E3
+ acc.4 00E4
+ acc.5 00E5
+ acc.6 00E6
+ acc.7 00E7
+ ar0 = 0000
+ ar1 = 0001
+ ar2 = 0002
+ ar3 = 0003
+ ar4 = 0004
+ ar5 = 0005
+ ar6 = 0006
+ ar7 = 0007
+ b 00F0
+ b.0 00F0
+ b.1 00F1
+ b.2 00F2
+ b.3 00F3
+ b.4 00F4
+ b.5 00F5
+ b.6 00F6
+ b.7 00F7
+ cprl2 00C8
+ ct2 00C9
+ cy 00D7
+ dph 0083
+ dpl 0082
+ ea 00AF
+ es 00AC
+ et0 00A9
+ et1 00AB
+ et2 00AD
+ ex0 00A8
+ ex1 00AA
+ exen2 00CB
+ exf2 00CE
+ f0 00D5
+ ie 00A8
+ ie.0 00A8
+ ie.1 00A9
+ ie.2 00AA
+ ie.3 00AB
+ ie.4 00AC
+ ie.5 00AD
+ ie.7 00AF
+ ie0 0089
+ ie1 008B
+ int0 00B2
+ int1 00B3
+ ip 00B8
+ ip.0 00B8
+ ip.1 00B9
+ ip.2 00BA
+ ip.3 00BB
+ ip.4 00BC
+ ip.5 00BD
+ it0 0088
+ it1 008A
+ ov 00D2
+ p 00D0
+ p0 0080
+ p0.0 0080
+ p0.1 0081
+ p0.2 0082
+ p0.3 0083
+ p0.4 0084
+ p0.5 0085
+ p0.6 0086
+ p0.7 0087
+ p1 0090
+ p1.0 0090
+ p1.1 0091
+ p1.2 0092
+ p1.3 0093
+ p1.4 0094
+ p1.5 0095
+ p1.6 0096
+ p1.7 0097
+ p2 00A0
+ p2.0 00A0
+ p2.1 00A1
+ p2.2 00A2
+ p2.3 00A3
+ p2.4 00A4
+ p2.5 00A5
+ p2.6 00A6
+ p2.7 00A7
+ p3 00B0
+ p3.0 00B0
+ p3.1 00B1
+ p3.2 00B2
+ p3.3 00B3
+ p3.4 00B4
+ p3.5 00B5
+ p3.6 00B6
+ p3.7 00B7
+ pcon 0087
+ ps 00BC
+ psw 00D0
+ psw.0 00D0
+ psw.1 00D1
+ psw.2 00D2
+ psw.3 00D3
+ psw.4 00D4
+ psw.5 00D5
+ psw.6 00D6
+ psw.7 00D7
+ pt0 00B9
+ pt1 00BB
+ pt2 00BD
+ px0 00B8
+ px1 00BA
+ rb8 009A
+ rcap2h 00CB
+ rcap2l 00CA
+ rclk 00CD
+ ren 009C
+ ri 0098
+ rs0 00D3
+ rs1 00D4
+ rxd 00B0
+ sbuf 0099
+ scon 0098
+ scon.0 0098
+ scon.1 0099
+ scon.2 009A
+ scon.3 009B
+ scon.4 009C
+ scon.5 009D
+ scon.6 009E
+ scon.7 009F
+ sm0 009F
+ sm1 009E
+ sm2 009D
+ sp 0081
+ t2con 00C8
+ t2con.0 00C8
+ t2con.1 00C9
+ t2con.2 00CA
+ t2con.3 00CB
+ t2con.4 00CC
+ t2con.5 00CD
+ t2con.6 00CE
+ t2con.7 00CF
+ tb8 009B
+ tclk 00CC
+ tcon 0088
+ tcon.0 0088
+ tcon.1 0089
+ tcon.2 008A
+ tcon.3 008B
+ tcon.4 008C
+ tcon.5 008D
+ tcon.6 008E
+ tcon.7 008F
+ tf0 008D
+ tf1 008F
+ tf2 00CF
+ th0 008C
+ th1 008D
+ th2 00CD
+ ti 0099
+ tl0 008A
+ tl1 008B
+ tl2 00CC
+ tmod 0089
+ tr0 008C
+ tr1 008E
+ tr2 00CA
+ txd 00B1
+
+ ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2.
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 RSEG size 0 flags 0
+ 2 REG_BANK_0 size 8 flags 4
+ 3 DSEG size 6 flags 0
+ 4 OSEG size 0 flags 4
+ 5 SSEG size 1 flags 0
+ 6 ISEG size 0 flags 0
+ 7 IABS size 0 flags 8
+ 8 BSEG size 0 flags 80
+ 9 PSEG size 0 flags 50
+ A XSEG size 0 flags 40
+ B XABS size 0 flags 48
+ C XISEG size 0 flags 40
+ D HOME size 8 flags 20
+ E GSINIT0 size 0 flags 20
+ F GSINIT1 size 0 flags 20
+ 10 GSINIT2 size 0 flags 20
+ 11 GSINIT3 size 0 flags 20
+ 12 GSINIT4 size 0 flags 20
+ 13 GSINIT5 size 0 flags 20
+ 14 GSINIT size 9 flags 20
+ 15 GSFINAL size 3 flags 20
+ 16 CSEG size 5C flags 20
+ 17 CONST size 0 flags 20
+ 18 XINIT size 0 flags 20
+ 19 CABS size 0 flags 28
diff --git a/demo/file.hex b/demo/file.hex
new file mode 100644
index 0000000..b6d53b5
--- /dev/null
+++ b/demo/file.hex
@@ -0,0 +1,2 @@
+:0600000080FE33343334AE
+:00000001FF \ No newline at end of file
diff --git a/demo/file.lst b/demo/file.lst
new file mode 100644
index 0000000..5ca698c
--- /dev/null
+++ b/demo/file.lst
@@ -0,0 +1,292 @@
+demo3 demo - 3 32/13/1907 PAGE 6
+ 1 ; MCU 8051 IDE - Demostration code
+ 2 ; Compiler directives
+ 3
+ 4
+ 5 $DATE(32/13/1907)   ; Places date
+ 6 ; $EJECT ; Places a fo
+ 7 ; $INCLUDE(file.asm) ; Inserts fil
+ 8 ; $LIST ; Allows list
+ 9 ; $NOLIST ; Stops outpu
+ 10 ; $NOMOD ; No predefin
+ demo3 demo - 3 32/13/1907 PAGE 7
+ 11 $OBJECT(file.hex) ; Places obje
+ 12 ; $NOOBJECT ; No object f
+ 13 $PAGING ; Break outpu
+ 14 ; $NOPAGING ; Print listi
+ 15 $PAGELENGTH(10) ; No. of line
+ 16 $PAGEWIDTH(20)    ; No. of colu
+ 17 $PRINT(file.lst) ; Places list
+ 18 ; $NOPRINT ; Listing wil
+ 19 ; $SYMBOLS ; Append symb
+ 20 ; $NOSYMBOLS ; Symbol tabl
+ demo3 demo - 3 32/13/1907 PAGE 8
+ 21 $TITLE('demo - 3') ; Places stri
+ 22
+ 23
+ 24 ;; Summary of Cross Assembler Directi
+ 25 ;; ----------------------------------
+ 26
+ 0036 27 a EQU 54d ; Define symb
+ 001B 28 b0 DATA a / 2 ; Define inte
+ 0031 29 c IDATA (b0*2-5) ; Def
+ 0038 30 d BIT 070Q ; Define inte
+ demo3 demo - 3 32/13/1907 PAGE 9
+ FFA5 31 e CODE 0FFA5h ; Define prog
+****WARNING: Exceeding code memory capacity: e = 65445
+ FFF2 33 var SET (A * 44) MOD 9 - 14 ;
+ 34
+ 35 CSEG at 20h ; Select prog
+ 36 x: DB '34' ; Store byte
+ 37 y: DW 3334h ; Store word
+ 38
+ 39 DSEG at 5d ; Select inte
+ 40 m: DS 1 ; Reserve byt
+ demo3 demo - 3 32/13/1907 PAGE 10
+ 41
+ 42 xseg ; Select exte
+ 43 n: DS 1 ; Reserve byt
+ 44
+ 45 ISEG ; Select indi
+ 46 o: DS 1 ; Reserve byt
+ 47
+ 48 NOLIST ; Disable code listin
+ 51 LIST ; Enable code listing
+ 52
+ demo3 demo - 3 32/13/1907 PAGE 11
+ 53
+ 54 +1 mc macro label ; Define macr
+ 55 +1 sjmp main
+ 56 IF 2 <> 2 OR 1 = 4
+ 57 EXITM ; Exit macro
+ 58 ENDIF
+ 59 sjmp label
+ 60 endm ; End of defi
+ 61
+ 62 main: ORG 0 ; Set segment
+ demo3 demo - 3 32/13/1907 PAGE 12
+ 63 IF 0 ; Begin conditional a
+ 64 USING 2 ; Sel
+ 65 ELSE ; Alternative conditi
+ 66 USING 2 ; Sel
+ 67 ENDIF ; End conditional ass
+ 68
+ 69 mc main ; Macro instu
+ 70
+ 71 END ; End of assembly lan
+ASSEMBLY COMPLETE, NO ERRORS FOUND, 1 WARNING
+
+
+
+ demo3 demo - 3 32/13/1907 PAGE 2
+
+ERROR SUMMARY:
+Line 31, WARNING: Exceeding code memory capacity: e = 65445
+ demo3 demo - 3 32/13/1907 PAGE 3
+
+
+
+
+ demo3 demo - 3 32/13/1907 PAGE 4
+SYMBOL TABLE:
+A. . . . . . . . . . . . . . . . . . N NUMB 0036H NOT USED
+AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
+ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED
+ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED
+ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED
+ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED
+ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED
+ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED
+AR0. . . . . . . . . . . . . . . . . NUMB 0010H NOT USED REDEFINABLE
+AR1. . . . . . . . . . . . . . . . . NUMB 0011H NOT USED REDEFINABLE
+AR2. . . . . . . . . . . . . . . . . NUMB 0012H NOT USED REDEFINABLE
+AR3. . . . . . . . . . . . . . . . . NUMB 0013H NOT USED REDEFINABLE
+AR4. . . . . . . . . . . . . . . . . NUMB 0014H NOT USED REDEFINABLE
+AR5. . . . . . . . . . . . . . . . . NUMB 0015H NOT USED REDEFINABLE
+AR6. . . . . . . . . . . . . . . . . NUMB 0016H NOT USED REDEFINABLE
+AR7. . . . . . . . . . . . . . . . . NUMB 0017H NOT USED REDEFINABLE
+AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
+AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
+B. . . . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED
+B0 . . . . . . . . . . . . . . . . . D ADDR 001BH NOT USED
+BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED
+BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED
+C. . . . . . . . . . . . . . . . . . I ADDR 0031H NOT USED
+CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED
+CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED
+CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED
+CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED
+CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED
+CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED
+CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED
+CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED
+CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED
+CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED
+CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED
+CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED
+CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED
+CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED
+CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED
+CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED
+CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED
+CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED
+CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED
+CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED
+CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED
+CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED
+CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
+CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED
+CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
+CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
+D. . . . . . . . . . . . . . . . . . B ADDR 0038H NOT USED
+DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
+DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+ demo3 demo - 3 32/13/1907 PAGE 5
+DPL. . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+E. . . . . . . . . . . . . . . . . . C ADDR FFA5H NOT USED
+EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
+EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED
+EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
+ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
+ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
+ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
+ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED
+EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
+EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
+EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
+EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
+EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED
+EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED
+F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
+FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED
+IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
+IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
+INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
+INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
+IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED
+IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED
+IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
+IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
+KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED
+KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED
+KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+M. . . . . . . . . . . . . . . . . . D ADDR 0005H NOT USED
+MAIN . . . . . . . . . . . . . . . . C ADDR 0000H
+N. . . . . . . . . . . . . . . . . . X ADDR 0000H NOT USED
+O. . . . . . . . . . . . . . . . . . I ADDR 0000H NOT USED
+OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
+P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
+P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
+P1 . . . . . . . . . . . . . . . . . D ADDR 0090H NOT USED
+P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED
+P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED
+P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
+P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H NOT USED
+P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED
+P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
+P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED
+P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED
+P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED
+PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
+PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED
+PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+ demo3 demo - 3 32/13/1907 PAGE 6
+R. . . . . . . . . . . . . . . . . . B ADDR 0000H NOT USED
+RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
+RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
+RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
+RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
+RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
+REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
+RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED
+RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
+RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED
+RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED
+RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
+SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED
+SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
+SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
+SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED
+SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
+SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
+SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED
+SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED
+SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED
+SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED
+T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
+T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
+T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
+T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
+TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
+TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
+TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
+TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
+TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
+TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
+TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
+TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
+TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
+TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
+TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED
+TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED
+TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED
+TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED
+TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
+TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
+TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED
+TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED
+TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
+TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
+TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
+VAR. . . . . . . . . . . . . . . . . NUMB FFF2H NOT USED REDEFINABLE
+WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
+WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED
+X. . . . . . . . . . . . . . . . . . C ADDR 0002H NOT USED
+Y. . . . . . . . . . . . . . . . . . C ADDR 0004H NOT USED \ No newline at end of file
diff --git a/demo/keypad_display b/demo/keypad_display
new file mode 100644
index 0000000..4bea3f5
--- /dev/null
+++ b/demo/keypad_display
Binary files differ
diff --git a/demo/keypad_display.adb b/demo/keypad_display.adb
new file mode 100644
index 0000000..ff7f769
--- /dev/null
+++ b/demo/keypad_display.adb
@@ -0,0 +1,106 @@
+M:keypad_display
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+S:G$state$0$0({1}SC:S),E,0,0
+S:G$row$0$0({2}SI:S),E,0,0
+S:G$P0$0$0({1}SC:U),I,0,0
+S:G$SP$0$0({1}SC:U),I,0,0
+S:G$DPL$0$0({1}SC:U),I,0,0
+S:G$DPH$0$0({1}SC:U),I,0,0
+S:G$PCON$0$0({1}SC:U),I,0,0
+S:G$TCON$0$0({1}SC:U),I,0,0
+S:G$TMOD$0$0({1}SC:U),I,0,0
+S:G$TL0$0$0({1}SC:U),I,0,0
+S:G$TL1$0$0({1}SC:U),I,0,0
+S:G$TH0$0$0({1}SC:U),I,0,0
+S:G$TH1$0$0({1}SC:U),I,0,0
+S:G$P1$0$0({1}SC:U),I,0,0
+S:G$SCON$0$0({1}SC:U),I,0,0
+S:G$SBUF$0$0({1}SC:U),I,0,0
+S:G$P2$0$0({1}SC:U),I,0,0
+S:G$IE$0$0({1}SC:U),I,0,0
+S:G$P3$0$0({1}SC:U),I,0,0
+S:G$IP$0$0({1}SC:U),I,0,0
+S:G$PSW$0$0({1}SC:U),I,0,0
+S:G$ACC$0$0({1}SC:U),I,0,0
+S:G$B$0$0({1}SC:U),I,0,0
+S:G$P0_0$0$0({1}SX:U),J,0,0
+S:G$P0_1$0$0({1}SX:U),J,0,0
+S:G$P0_2$0$0({1}SX:U),J,0,0
+S:G$P0_3$0$0({1}SX:U),J,0,0
+S:G$P0_4$0$0({1}SX:U),J,0,0
+S:G$P0_5$0$0({1}SX:U),J,0,0
+S:G$P0_6$0$0({1}SX:U),J,0,0
+S:G$P0_7$0$0({1}SX:U),J,0,0
+S:G$IT0$0$0({1}SX:U),J,0,0
+S:G$IE0$0$0({1}SX:U),J,0,0
+S:G$IT1$0$0({1}SX:U),J,0,0
+S:G$IE1$0$0({1}SX:U),J,0,0
+S:G$TR0$0$0({1}SX:U),J,0,0
+S:G$TF0$0$0({1}SX:U),J,0,0
+S:G$TR1$0$0({1}SX:U),J,0,0
+S:G$TF1$0$0({1}SX:U),J,0,0
+S:G$P1_0$0$0({1}SX:U),J,0,0
+S:G$P1_1$0$0({1}SX:U),J,0,0
+S:G$P1_2$0$0({1}SX:U),J,0,0
+S:G$P1_3$0$0({1}SX:U),J,0,0
+S:G$P1_4$0$0({1}SX:U),J,0,0
+S:G$P1_5$0$0({1}SX:U),J,0,0
+S:G$P1_6$0$0({1}SX:U),J,0,0
+S:G$P1_7$0$0({1}SX:U),J,0,0
+S:G$RI$0$0({1}SX:U),J,0,0
+S:G$TI$0$0({1}SX:U),J,0,0
+S:G$RB8$0$0({1}SX:U),J,0,0
+S:G$TB8$0$0({1}SX:U),J,0,0
+S:G$REN$0$0({1}SX:U),J,0,0
+S:G$SM2$0$0({1}SX:U),J,0,0
+S:G$SM1$0$0({1}SX:U),J,0,0
+S:G$SM0$0$0({1}SX:U),J,0,0
+S:G$P2_0$0$0({1}SX:U),J,0,0
+S:G$P2_1$0$0({1}SX:U),J,0,0
+S:G$P2_2$0$0({1}SX:U),J,0,0
+S:G$P2_3$0$0({1}SX:U),J,0,0
+S:G$P2_4$0$0({1}SX:U),J,0,0
+S:G$P2_5$0$0({1}SX:U),J,0,0
+S:G$P2_6$0$0({1}SX:U),J,0,0
+S:G$P2_7$0$0({1}SX:U),J,0,0
+S:G$EX0$0$0({1}SX:U),J,0,0
+S:G$ET0$0$0({1}SX:U),J,0,0
+S:G$EX1$0$0({1}SX:U),J,0,0
+S:G$ET1$0$0({1}SX:U),J,0,0
+S:G$ES$0$0({1}SX:U),J,0,0
+S:G$EA$0$0({1}SX:U),J,0,0
+S:G$P3_0$0$0({1}SX:U),J,0,0
+S:G$P3_1$0$0({1}SX:U),J,0,0
+S:G$P3_2$0$0({1}SX:U),J,0,0
+S:G$P3_3$0$0({1}SX:U),J,0,0
+S:G$P3_4$0$0({1}SX:U),J,0,0
+S:G$P3_5$0$0({1}SX:U),J,0,0
+S:G$P3_6$0$0({1}SX:U),J,0,0
+S:G$P3_7$0$0({1}SX:U),J,0,0
+S:G$RXD$0$0({1}SX:U),J,0,0
+S:G$TXD$0$0({1}SX:U),J,0,0
+S:G$INT0$0$0({1}SX:U),J,0,0
+S:G$INT1$0$0({1}SX:U),J,0,0
+S:G$T0$0$0({1}SX:U),J,0,0
+S:G$T1$0$0({1}SX:U),J,0,0
+S:G$WR$0$0({1}SX:U),J,0,0
+S:G$RD$0$0({1}SX:U),J,0,0
+S:G$PX0$0$0({1}SX:U),J,0,0
+S:G$PT0$0$0({1}SX:U),J,0,0
+S:G$PX1$0$0({1}SX:U),J,0,0
+S:G$PT1$0$0({1}SX:U),J,0,0
+S:G$PS$0$0({1}SX:U),J,0,0
+S:G$P$0$0({1}SX:U),J,0,0
+S:G$F1$0$0({1}SX:U),J,0,0
+S:G$OV$0$0({1}SX:U),J,0,0
+S:G$RS0$0$0({1}SX:U),J,0,0
+S:G$RS1$0$0({1}SX:U),J,0,0
+S:G$F0$0$0({1}SX:U),J,0,0
+S:G$AC$0$0({1}SX:U),J,0,0
+S:G$CY$0$0({1}SX:U),J,0,0
+S:G$main$0$0({2}DF,SI:S),C,0,0
+S:Fkeypad_display$keypad$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_0$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_1$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_2$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_3$0$0({4}DA4,SC:S),D,0,0
diff --git a/demo/keypad_display.asm b/demo/keypad_display.asm
new file mode 100644
index 0000000..a216cbe
--- /dev/null
+++ b/demo/keypad_display.asm
@@ -0,0 +1,624 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+; This file was generated Tue Oct 27 23:03:55 2009
+;--------------------------------------------------------
+ .module keypad_display
+ .optsdcc -mmcs51 --model-small
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _main
+ .globl _CY
+ .globl _AC
+ .globl _F0
+ .globl _RS1
+ .globl _RS0
+ .globl _OV
+ .globl _F1
+ .globl _P
+ .globl _PS
+ .globl _PT1
+ .globl _PX1
+ .globl _PT0
+ .globl _PX0
+ .globl _RD
+ .globl _WR
+ .globl _T1
+ .globl _T0
+ .globl _INT1
+ .globl _INT0
+ .globl _TXD
+ .globl _RXD
+ .globl _P3_7
+ .globl _P3_6
+ .globl _P3_5
+ .globl _P3_4
+ .globl _P3_3
+ .globl _P3_2
+ .globl _P3_1
+ .globl _P3_0
+ .globl _EA
+ .globl _ES
+ .globl _ET1
+ .globl _EX1
+ .globl _ET0
+ .globl _EX0
+ .globl _P2_7
+ .globl _P2_6
+ .globl _P2_5
+ .globl _P2_4
+ .globl _P2_3
+ .globl _P2_2
+ .globl _P2_1
+ .globl _P2_0
+ .globl _SM0
+ .globl _SM1
+ .globl _SM2
+ .globl _REN
+ .globl _TB8
+ .globl _RB8
+ .globl _TI
+ .globl _RI
+ .globl _P1_7
+ .globl _P1_6
+ .globl _P1_5
+ .globl _P1_4
+ .globl _P1_3
+ .globl _P1_2
+ .globl _P1_1
+ .globl _P1_0
+ .globl _TF1
+ .globl _TR1
+ .globl _TF0
+ .globl _TR0
+ .globl _IE1
+ .globl _IT1
+ .globl _IE0
+ .globl _IT0
+ .globl _P0_7
+ .globl _P0_6
+ .globl _P0_5
+ .globl _P0_4
+ .globl _P0_3
+ .globl _P0_2
+ .globl _P0_1
+ .globl _P0_0
+ .globl _B
+ .globl _ACC
+ .globl _PSW
+ .globl _IP
+ .globl _P3
+ .globl _IE
+ .globl _P2
+ .globl _SBUF
+ .globl _SCON
+ .globl _P1
+ .globl _TH1
+ .globl _TH0
+ .globl _TL1
+ .globl _TL0
+ .globl _TMOD
+ .globl _TCON
+ .globl _PCON
+ .globl _DPH
+ .globl _DPL
+ .globl _SP
+ .globl _P0
+ .globl _row
+ .globl _state
+;--------------------------------------------------------
+; special function registers
+;--------------------------------------------------------
+ .area RSEG (DATA)
+G$P0$0$0 == 0x0080
+_P0 = 0x0080
+G$SP$0$0 == 0x0081
+_SP = 0x0081
+G$DPL$0$0 == 0x0082
+_DPL = 0x0082
+G$DPH$0$0 == 0x0083
+_DPH = 0x0083
+G$PCON$0$0 == 0x0087
+_PCON = 0x0087
+G$TCON$0$0 == 0x0088
+_TCON = 0x0088
+G$TMOD$0$0 == 0x0089
+_TMOD = 0x0089
+G$TL0$0$0 == 0x008a
+_TL0 = 0x008a
+G$TL1$0$0 == 0x008b
+_TL1 = 0x008b
+G$TH0$0$0 == 0x008c
+_TH0 = 0x008c
+G$TH1$0$0 == 0x008d
+_TH1 = 0x008d
+G$P1$0$0 == 0x0090
+_P1 = 0x0090
+G$SCON$0$0 == 0x0098
+_SCON = 0x0098
+G$SBUF$0$0 == 0x0099
+_SBUF = 0x0099
+G$P2$0$0 == 0x00a0
+_P2 = 0x00a0
+G$IE$0$0 == 0x00a8
+_IE = 0x00a8
+G$P3$0$0 == 0x00b0
+_P3 = 0x00b0
+G$IP$0$0 == 0x00b8
+_IP = 0x00b8
+G$PSW$0$0 == 0x00d0
+_PSW = 0x00d0
+G$ACC$0$0 == 0x00e0
+_ACC = 0x00e0
+G$B$0$0 == 0x00f0
+_B = 0x00f0
+;--------------------------------------------------------
+; special function bits
+;--------------------------------------------------------
+ .area RSEG (DATA)
+G$P0_0$0$0 == 0x0080
+_P0_0 = 0x0080
+G$P0_1$0$0 == 0x0081
+_P0_1 = 0x0081
+G$P0_2$0$0 == 0x0082
+_P0_2 = 0x0082
+G$P0_3$0$0 == 0x0083
+_P0_3 = 0x0083
+G$P0_4$0$0 == 0x0084
+_P0_4 = 0x0084
+G$P0_5$0$0 == 0x0085
+_P0_5 = 0x0085
+G$P0_6$0$0 == 0x0086
+_P0_6 = 0x0086
+G$P0_7$0$0 == 0x0087
+_P0_7 = 0x0087
+G$IT0$0$0 == 0x0088
+_IT0 = 0x0088
+G$IE0$0$0 == 0x0089
+_IE0 = 0x0089
+G$IT1$0$0 == 0x008a
+_IT1 = 0x008a
+G$IE1$0$0 == 0x008b
+_IE1 = 0x008b
+G$TR0$0$0 == 0x008c
+_TR0 = 0x008c
+G$TF0$0$0 == 0x008d
+_TF0 = 0x008d
+G$TR1$0$0 == 0x008e
+_TR1 = 0x008e
+G$TF1$0$0 == 0x008f
+_TF1 = 0x008f
+G$P1_0$0$0 == 0x0090
+_P1_0 = 0x0090
+G$P1_1$0$0 == 0x0091
+_P1_1 = 0x0091
+G$P1_2$0$0 == 0x0092
+_P1_2 = 0x0092
+G$P1_3$0$0 == 0x0093
+_P1_3 = 0x0093
+G$P1_4$0$0 == 0x0094
+_P1_4 = 0x0094
+G$P1_5$0$0 == 0x0095
+_P1_5 = 0x0095
+G$P1_6$0$0 == 0x0096
+_P1_6 = 0x0096
+G$P1_7$0$0 == 0x0097
+_P1_7 = 0x0097
+G$RI$0$0 == 0x0098
+_RI = 0x0098
+G$TI$0$0 == 0x0099
+_TI = 0x0099
+G$RB8$0$0 == 0x009a
+_RB8 = 0x009a
+G$TB8$0$0 == 0x009b
+_TB8 = 0x009b
+G$REN$0$0 == 0x009c
+_REN = 0x009c
+G$SM2$0$0 == 0x009d
+_SM2 = 0x009d
+G$SM1$0$0 == 0x009e
+_SM1 = 0x009e
+G$SM0$0$0 == 0x009f
+_SM0 = 0x009f
+G$P2_0$0$0 == 0x00a0
+_P2_0 = 0x00a0
+G$P2_1$0$0 == 0x00a1
+_P2_1 = 0x00a1
+G$P2_2$0$0 == 0x00a2
+_P2_2 = 0x00a2
+G$P2_3$0$0 == 0x00a3
+_P2_3 = 0x00a3
+G$P2_4$0$0 == 0x00a4
+_P2_4 = 0x00a4
+G$P2_5$0$0 == 0x00a5
+_P2_5 = 0x00a5
+G$P2_6$0$0 == 0x00a6
+_P2_6 = 0x00a6
+G$P2_7$0$0 == 0x00a7
+_P2_7 = 0x00a7
+G$EX0$0$0 == 0x00a8
+_EX0 = 0x00a8
+G$ET0$0$0 == 0x00a9
+_ET0 = 0x00a9
+G$EX1$0$0 == 0x00aa
+_EX1 = 0x00aa
+G$ET1$0$0 == 0x00ab
+_ET1 = 0x00ab
+G$ES$0$0 == 0x00ac
+_ES = 0x00ac
+G$EA$0$0 == 0x00af
+_EA = 0x00af
+G$P3_0$0$0 == 0x00b0
+_P3_0 = 0x00b0
+G$P3_1$0$0 == 0x00b1
+_P3_1 = 0x00b1
+G$P3_2$0$0 == 0x00b2
+_P3_2 = 0x00b2
+G$P3_3$0$0 == 0x00b3
+_P3_3 = 0x00b3
+G$P3_4$0$0 == 0x00b4
+_P3_4 = 0x00b4
+G$P3_5$0$0 == 0x00b5
+_P3_5 = 0x00b5
+G$P3_6$0$0 == 0x00b6
+_P3_6 = 0x00b6
+G$P3_7$0$0 == 0x00b7
+_P3_7 = 0x00b7
+G$RXD$0$0 == 0x00b0
+_RXD = 0x00b0
+G$TXD$0$0 == 0x00b1
+_TXD = 0x00b1
+G$INT0$0$0 == 0x00b2
+_INT0 = 0x00b2
+G$INT1$0$0 == 0x00b3
+_INT1 = 0x00b3
+G$T0$0$0 == 0x00b4
+_T0 = 0x00b4
+G$T1$0$0 == 0x00b5
+_T1 = 0x00b5
+G$WR$0$0 == 0x00b6
+_WR = 0x00b6
+G$RD$0$0 == 0x00b7
+_RD = 0x00b7
+G$PX0$0$0 == 0x00b8
+_PX0 = 0x00b8
+G$PT0$0$0 == 0x00b9
+_PT0 = 0x00b9
+G$PX1$0$0 == 0x00ba
+_PX1 = 0x00ba
+G$PT1$0$0 == 0x00bb
+_PT1 = 0x00bb
+G$PS$0$0 == 0x00bc
+_PS = 0x00bc
+G$P$0$0 == 0x00d0
+_P = 0x00d0
+G$F1$0$0 == 0x00d1
+_F1 = 0x00d1
+G$OV$0$0 == 0x00d2
+_OV = 0x00d2
+G$RS0$0$0 == 0x00d3
+_RS0 = 0x00d3
+G$RS1$0$0 == 0x00d4
+_RS1 = 0x00d4
+G$F0$0$0 == 0x00d5
+_F0 = 0x00d5
+G$AC$0$0 == 0x00d6
+_AC = 0x00d6
+G$CY$0$0 == 0x00d7
+_CY = 0x00d7
+;--------------------------------------------------------
+; overlayable register banks
+;--------------------------------------------------------
+ .area REG_BANK_0 (REL,OVR,DATA)
+ .ds 8
+;--------------------------------------------------------
+; internal ram data
+;--------------------------------------------------------
+ .area DSEG (DATA)
+G$state$0$0==.
+_state::
+ .ds 1
+G$row$0$0==.
+_row::
+ .ds 2
+;--------------------------------------------------------
+; overlayable items in internal ram
+;--------------------------------------------------------
+ .area OSEG (OVR,DATA)
+;--------------------------------------------------------
+; Stack segment in internal ram
+;--------------------------------------------------------
+ .area SSEG (DATA)
+__start__stack:
+ .ds 1
+
+;--------------------------------------------------------
+; indirectly addressable internal ram data
+;--------------------------------------------------------
+ .area ISEG (DATA)
+;--------------------------------------------------------
+; absolute internal ram data
+;--------------------------------------------------------
+ .area IABS (ABS,DATA)
+ .area IABS (ABS,DATA)
+;--------------------------------------------------------
+; bit data
+;--------------------------------------------------------
+ .area BSEG (BIT)
+;--------------------------------------------------------
+; paged external ram data
+;--------------------------------------------------------
+ .area PSEG (PAG,XDATA)
+;--------------------------------------------------------
+; external ram data
+;--------------------------------------------------------
+ .area XSEG (XDATA)
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area XABS (ABS,XDATA)
+;--------------------------------------------------------
+; external initialized ram data
+;--------------------------------------------------------
+ .area XISEG (XDATA)
+ .area HOME (CODE)
+ .area GSINIT0 (CODE)
+ .area GSINIT1 (CODE)
+ .area GSINIT2 (CODE)
+ .area GSINIT3 (CODE)
+ .area GSINIT4 (CODE)
+ .area GSINIT5 (CODE)
+ .area GSINIT (CODE)
+ .area GSFINAL (CODE)
+ .area CSEG (CODE)
+;--------------------------------------------------------
+; interrupt vector
+;--------------------------------------------------------
+ .area HOME (CODE)
+__interrupt_vect:
+ ljmp __sdcc_gsinit_startup
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME (CODE)
+ .area GSINIT (CODE)
+ .area GSFINAL (CODE)
+ .area GSINIT (CODE)
+ .globl __sdcc_gsinit_startup
+ .globl __sdcc_program_startup
+ .globl __start__stack
+ .globl __mcs51_genXINIT
+ .globl __mcs51_genXRAMCLEAR
+ .globl __mcs51_genRAMCLEAR
+ .area GSFINAL (CODE)
+ ljmp __sdcc_program_startup
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME (CODE)
+ .area HOME (CODE)
+__sdcc_program_startup:
+ lcall _main
+; return from main will lock up
+ sjmp .
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CSEG (CODE)
+;------------------------------------------------------------
+;Allocation info for local variables in function 'main'
+;------------------------------------------------------------
+;------------------------------------------------------------
+ G$main$0$0 ==.
+ C$keypad_display.c$38$0$0 ==.
+; keypad_display.c:38: int main()
+; -----------------------------------------
+; function main
+; -----------------------------------------
+_main:
+ ar2 = 0x02
+ ar3 = 0x03
+ ar4 = 0x04
+ ar5 = 0x05
+ ar6 = 0x06
+ ar7 = 0x07
+ ar0 = 0x00
+ ar1 = 0x01
+ C$keypad_display.c$40$1$1 ==.
+; keypad_display.c:40: while(1) {
+00123$:
+ C$keypad_display.c$41$2$2 ==.
+; keypad_display.c:41: for(row=0; row<4; row++) {
+ clr a
+ mov _row,a
+ mov (_row + 1),a
+00118$:
+ clr c
+ mov a,_row
+ subb a,#0x04
+ mov a,(_row + 1)
+ xrl a,#0x80
+ subb a,#0x80
+ jnc 00123$
+ C$keypad_display.c$42$3$3 ==.
+; keypad_display.c:42: P1=keypad[row];
+ mov a,_row
+ add a,#_keypad
+ mov dpl,a
+ mov a,(_row + 1)
+ addc a,#(_keypad >> 8)
+ mov dph,a
+ clr a
+ movc a,@a+dptr
+ mov _P1,a
+ C$keypad_display.c$48$3$3 ==.
+; keypad_display.c:48: _endasm;
+
+ mov _state, P1
+
+ C$keypad_display.c$53$3$3 ==.
+; keypad_display.c:53: state&=0x0f;
+ anl _state,#0x0F
+ C$keypad_display.c$54$3$3 ==.
+; keypad_display.c:54: state^=0x0f;
+ xrl _state,#0x0F
+ C$keypad_display.c$56$3$3 ==.
+; keypad_display.c:56: if(state & 1) {
+ mov a,_state
+ jnb acc.0,00111$
+ C$keypad_display.c$57$4$4 ==.
+; keypad_display.c:57: state=0;
+ mov _state,#0x00
+ sjmp 00112$
+00111$:
+ C$keypad_display.c$58$3$3 ==.
+; keypad_display.c:58: } else if(state & 2) {
+ mov a,_state
+ jnb acc.1,00108$
+ C$keypad_display.c$59$4$5 ==.
+; keypad_display.c:59: state=1;
+ mov _state,#0x01
+ sjmp 00112$
+00108$:
+ C$keypad_display.c$60$3$3 ==.
+; keypad_display.c:60: } else if(state & 4) {
+ mov a,_state
+ jnb acc.2,00105$
+ C$keypad_display.c$61$4$6 ==.
+; keypad_display.c:61: state=2;
+ mov _state,#0x02
+ sjmp 00112$
+00105$:
+ C$keypad_display.c$62$3$3 ==.
+; keypad_display.c:62: } else if(state & 8) {
+ mov a,_state
+ jb acc.3,00142$
+ ljmp 00120$
+00142$:
+ C$keypad_display.c$63$4$7 ==.
+; keypad_display.c:63: state=3;
+ mov _state,#0x03
+ C$keypad_display.c$65$3$3 ==.
+; keypad_display.c:65: continue;
+00112$:
+ C$keypad_display.c$68$3$3 ==.
+; keypad_display.c:68: switch(row) {
+ clr a
+ cjne a,_row,00143$
+ clr a
+ cjne a,(_row + 1),00143$
+ sjmp 00113$
+00143$:
+ mov a,#0x01
+ cjne a,_row,00144$
+ clr a
+ cjne a,(_row + 1),00144$
+ sjmp 00114$
+00144$:
+ mov a,#0x02
+ cjne a,_row,00145$
+ clr a
+ cjne a,(_row + 1),00145$
+ sjmp 00115$
+00145$:
+ mov a,#0x03
+ cjne a,_row,00146$
+ clr a
+ cjne a,(_row + 1),00146$
+ sjmp 00116$
+00146$:
+ C$keypad_display.c$69$4$9 ==.
+; keypad_display.c:69: case 0:
+ sjmp 00120$
+00113$:
+ C$keypad_display.c$70$4$9 ==.
+; keypad_display.c:70: P3=display_0[state];
+ mov a,_state
+ mov dptr,#_display_0
+ movc a,@a+dptr
+ mov _P3,a
+ C$keypad_display.c$71$4$9 ==.
+; keypad_display.c:71: break;
+ C$keypad_display.c$72$4$9 ==.
+; keypad_display.c:72: case 1:
+ sjmp 00120$
+00114$:
+ C$keypad_display.c$73$4$9 ==.
+; keypad_display.c:73: P3=display_1[state];
+ mov a,_state
+ mov dptr,#_display_1
+ movc a,@a+dptr
+ mov _P3,a
+ C$keypad_display.c$74$4$9 ==.
+; keypad_display.c:74: break;
+ C$keypad_display.c$75$4$9 ==.
+; keypad_display.c:75: case 2:
+ sjmp 00120$
+00115$:
+ C$keypad_display.c$76$4$9 ==.
+; keypad_display.c:76: P3=display_2[state];
+ mov a,_state
+ mov dptr,#_display_2
+ movc a,@a+dptr
+ mov _P3,a
+ C$keypad_display.c$77$4$9 ==.
+; keypad_display.c:77: break;
+ C$keypad_display.c$78$4$9 ==.
+; keypad_display.c:78: case 3:
+ sjmp 00120$
+00116$:
+ C$keypad_display.c$79$4$9 ==.
+; keypad_display.c:79: P3=display_3[state];
+ mov a,_state
+ mov dptr,#_display_3
+ movc a,@a+dptr
+ mov _P3,a
+ C$keypad_display.c$81$2$2 ==.
+; keypad_display.c:81: }
+00120$:
+ C$keypad_display.c$41$2$2 ==.
+; keypad_display.c:41: for(row=0; row<4; row++) {
+ inc _row
+ clr a
+ cjne a,_row,00147$
+ inc (_row + 1)
+00147$:
+ C$keypad_display.c$84$1$1 ==.
+ XG$main$0$0 ==.
+ ljmp 00118$
+ .area CSEG (CODE)
+ .area CONST (CODE)
+Fkeypad_display$keypad$0$0 == .
+_keypad:
+ .db #0xEF
+ .db #0xDF
+ .db #0xBF
+ .db #0x7F
+Fkeypad_display$display_0$0$0 == .
+_display_0:
+ .db #0xF9
+ .db #0x64
+ .db #0x70
+ .db #0x48
+Fkeypad_display$display_1$0$0 == .
+_display_1:
+ .db #0x59
+ .db #0x52
+ .db #0x42
+ .db #0x40
+Fkeypad_display$display_2$0$0 == .
+_display_2:
+ .db #0xF8
+ .db #0x40
+ .db #0x50
+ .db #0xC6
+Fkeypad_display$display_3$0$0 == .
+_display_3:
+ .db #0x79
+ .db #0xC0
+ .db #0x49
+ .db #0xC0
+ .area XINIT (CODE)
+ .area CABS (ABS,CODE)
diff --git a/demo/keypad_display.c b/demo/keypad_display.c
new file mode 100644
index 0000000..e6cadf6
--- /dev/null
+++ b/demo/keypad_display.c
@@ -0,0 +1,84 @@
+/**
+ * Demonstration code for MCU 8051 IDE
+ *
+ * Create virtual multiplexed LED display
+ * [Main menu] -> [Virtual HW] -> [Open]
+ * and open file keypad_display.vhw .
+ * Then press F2 and F9 to start simulation.
+ *
+ * Notes:
+ * F9 - stop simulation
+ * F2 - shutdown simulator
+ *
+ * @file keypad_display.c
+ */
+
+#include <8051.h>
+#define USE_INLINE_ASM 1
+
+static const char keypad[] = {
+ 0xEF, 0xDF, 0xBF, 0x7F
+};
+static const char display_0[] = {
+ 0xf9, 0x64, 0x70, 0x48
+};
+static const char display_1[] = {
+ 0x59, 0x52, 0x42, 0x40
+};
+static const char display_2[] = {
+ 0xf8, 0x40, 0x50, 0xc6
+};
+static const char display_3[] = {
+ 0x79, 0xc0, 0x49, 0xc0
+};
+
+char state;
+int row;
+
+int main()
+{
+ while(1) {
+ for(row=0; row<4; row++) {
+ P1=keypad[row];
+
+ #if USE_INLINE_ASM
+ // Inline assembler
+ _asm
+ mov _state, P1
+ _endasm;
+ #else
+ state=P1;
+ #endif
+
+ state&=0x0f;
+ state^=0x0f;
+
+ if(state & 1) {
+ state=0;
+ } else if(state & 2) {
+ state=1;
+ } else if(state & 4) {
+ state=2;
+ } else if(state & 8) {
+ state=3;
+ } else {
+ continue;
+ }
+
+ switch(row) {
+ case 0:
+ P3=display_0[state];
+ break;
+ case 1:
+ P3=display_1[state];
+ break;
+ case 2:
+ P3=display_2[state];
+ break;
+ case 3:
+ P3=display_3[state];
+ break;
+ }
+ }
+ }
+}
diff --git a/demo/keypad_display.cdb b/demo/keypad_display.cdb
new file mode 100644
index 0000000..a0420fc
--- /dev/null
+++ b/demo/keypad_display.cdb
@@ -0,0 +1,328 @@
+M:keypad_display
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+S:G$state$0$0({1}SC:S),E,0,0
+S:G$row$0$0({2}SI:S),E,0,0
+S:G$P0$0$0({1}SC:U),I,0,0
+S:G$SP$0$0({1}SC:U),I,0,0
+S:G$DPL$0$0({1}SC:U),I,0,0
+S:G$DPH$0$0({1}SC:U),I,0,0
+S:G$PCON$0$0({1}SC:U),I,0,0
+S:G$TCON$0$0({1}SC:U),I,0,0
+S:G$TMOD$0$0({1}SC:U),I,0,0
+S:G$TL0$0$0({1}SC:U),I,0,0
+S:G$TL1$0$0({1}SC:U),I,0,0
+S:G$TH0$0$0({1}SC:U),I,0,0
+S:G$TH1$0$0({1}SC:U),I,0,0
+S:G$P1$0$0({1}SC:U),I,0,0
+S:G$SCON$0$0({1}SC:U),I,0,0
+S:G$SBUF$0$0({1}SC:U),I,0,0
+S:G$P2$0$0({1}SC:U),I,0,0
+S:G$IE$0$0({1}SC:U),I,0,0
+S:G$P3$0$0({1}SC:U),I,0,0
+S:G$IP$0$0({1}SC:U),I,0,0
+S:G$PSW$0$0({1}SC:U),I,0,0
+S:G$ACC$0$0({1}SC:U),I,0,0
+S:G$B$0$0({1}SC:U),I,0,0
+S:G$P0_0$0$0({1}SX:U),J,0,0
+S:G$P0_1$0$0({1}SX:U),J,0,0
+S:G$P0_2$0$0({1}SX:U),J,0,0
+S:G$P0_3$0$0({1}SX:U),J,0,0
+S:G$P0_4$0$0({1}SX:U),J,0,0
+S:G$P0_5$0$0({1}SX:U),J,0,0
+S:G$P0_6$0$0({1}SX:U),J,0,0
+S:G$P0_7$0$0({1}SX:U),J,0,0
+S:G$IT0$0$0({1}SX:U),J,0,0
+S:G$IE0$0$0({1}SX:U),J,0,0
+S:G$IT1$0$0({1}SX:U),J,0,0
+S:G$IE1$0$0({1}SX:U),J,0,0
+S:G$TR0$0$0({1}SX:U),J,0,0
+S:G$TF0$0$0({1}SX:U),J,0,0
+S:G$TR1$0$0({1}SX:U),J,0,0
+S:G$TF1$0$0({1}SX:U),J,0,0
+S:G$P1_0$0$0({1}SX:U),J,0,0
+S:G$P1_1$0$0({1}SX:U),J,0,0
+S:G$P1_2$0$0({1}SX:U),J,0,0
+S:G$P1_3$0$0({1}SX:U),J,0,0
+S:G$P1_4$0$0({1}SX:U),J,0,0
+S:G$P1_5$0$0({1}SX:U),J,0,0
+S:G$P1_6$0$0({1}SX:U),J,0,0
+S:G$P1_7$0$0({1}SX:U),J,0,0
+S:G$RI$0$0({1}SX:U),J,0,0
+S:G$TI$0$0({1}SX:U),J,0,0
+S:G$RB8$0$0({1}SX:U),J,0,0
+S:G$TB8$0$0({1}SX:U),J,0,0
+S:G$REN$0$0({1}SX:U),J,0,0
+S:G$SM2$0$0({1}SX:U),J,0,0
+S:G$SM1$0$0({1}SX:U),J,0,0
+S:G$SM0$0$0({1}SX:U),J,0,0
+S:G$P2_0$0$0({1}SX:U),J,0,0
+S:G$P2_1$0$0({1}SX:U),J,0,0
+S:G$P2_2$0$0({1}SX:U),J,0,0
+S:G$P2_3$0$0({1}SX:U),J,0,0
+S:G$P2_4$0$0({1}SX:U),J,0,0
+S:G$P2_5$0$0({1}SX:U),J,0,0
+S:G$P2_6$0$0({1}SX:U),J,0,0
+S:G$P2_7$0$0({1}SX:U),J,0,0
+S:G$EX0$0$0({1}SX:U),J,0,0
+S:G$ET0$0$0({1}SX:U),J,0,0
+S:G$EX1$0$0({1}SX:U),J,0,0
+S:G$ET1$0$0({1}SX:U),J,0,0
+S:G$ES$0$0({1}SX:U),J,0,0
+S:G$EA$0$0({1}SX:U),J,0,0
+S:G$P3_0$0$0({1}SX:U),J,0,0
+S:G$P3_1$0$0({1}SX:U),J,0,0
+S:G$P3_2$0$0({1}SX:U),J,0,0
+S:G$P3_3$0$0({1}SX:U),J,0,0
+S:G$P3_4$0$0({1}SX:U),J,0,0
+S:G$P3_5$0$0({1}SX:U),J,0,0
+S:G$P3_6$0$0({1}SX:U),J,0,0
+S:G$P3_7$0$0({1}SX:U),J,0,0
+S:G$RXD$0$0({1}SX:U),J,0,0
+S:G$TXD$0$0({1}SX:U),J,0,0
+S:G$INT0$0$0({1}SX:U),J,0,0
+S:G$INT1$0$0({1}SX:U),J,0,0
+S:G$T0$0$0({1}SX:U),J,0,0
+S:G$T1$0$0({1}SX:U),J,0,0
+S:G$WR$0$0({1}SX:U),J,0,0
+S:G$RD$0$0({1}SX:U),J,0,0
+S:G$PX0$0$0({1}SX:U),J,0,0
+S:G$PT0$0$0({1}SX:U),J,0,0
+S:G$PX1$0$0({1}SX:U),J,0,0
+S:G$PT1$0$0({1}SX:U),J,0,0
+S:G$PS$0$0({1}SX:U),J,0,0
+S:G$P$0$0({1}SX:U),J,0,0
+S:G$F1$0$0({1}SX:U),J,0,0
+S:G$OV$0$0({1}SX:U),J,0,0
+S:G$RS0$0$0({1}SX:U),J,0,0
+S:G$RS1$0$0({1}SX:U),J,0,0
+S:G$F0$0$0({1}SX:U),J,0,0
+S:G$AC$0$0({1}SX:U),J,0,0
+S:G$CY$0$0({1}SX:U),J,0,0
+S:G$main$0$0({2}DF,SI:S),C,0,0
+S:Fkeypad_display$keypad$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_0$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_1$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_2$0$0({4}DA4,SC:S),D,0,0
+S:Fkeypad_display$display_3$0$0({4}DA4,SC:S),D,0,0
+L:G$P0$0$0:80
+L:G$P0_0$0$0:80
+L:G$P0_1$0$0:81
+L:G$SP$0$0:81
+L:G$DPL$0$0:82
+L:G$P0_2$0$0:82
+L:G$DPH$0$0:83
+L:G$P0_3$0$0:83
+L:G$P0_4$0$0:84
+L:G$P0_5$0$0:85
+L:G$P0_6$0$0:86
+L:G$P0_7$0$0:87
+L:G$PCON$0$0:87
+L:G$IT0$0$0:88
+L:G$TCON$0$0:88
+L:G$IE0$0$0:89
+L:G$TMOD$0$0:89
+L:G$IT1$0$0:8A
+L:G$TL0$0$0:8A
+L:G$IE1$0$0:8B
+L:G$TL1$0$0:8B
+L:G$TH0$0$0:8C
+L:G$TR0$0$0:8C
+L:G$TF0$0$0:8D
+L:G$TH1$0$0:8D
+L:G$TR1$0$0:8E
+L:G$TF1$0$0:8F
+L:G$P1$0$0:90
+L:G$P1_0$0$0:90
+L:G$P1_1$0$0:91
+L:G$P1_2$0$0:92
+L:G$P1_3$0$0:93
+L:G$P1_4$0$0:94
+L:G$P1_5$0$0:95
+L:G$P1_6$0$0:96
+L:G$P1_7$0$0:97
+L:G$RI$0$0:98
+L:G$SCON$0$0:98
+L:G$SBUF$0$0:99
+L:G$TI$0$0:99
+L:G$RB8$0$0:9A
+L:G$TB8$0$0:9B
+L:G$REN$0$0:9C
+L:G$SM2$0$0:9D
+L:G$SM1$0$0:9E
+L:G$SM0$0$0:9F
+L:G$P2$0$0:A0
+L:G$P2_0$0$0:A0
+L:G$P2_1$0$0:A1
+L:G$P2_2$0$0:A2
+L:G$P2_3$0$0:A3
+L:G$P2_4$0$0:A4
+L:G$P2_5$0$0:A5
+L:G$P2_6$0$0:A6
+L:G$P2_7$0$0:A7
+L:G$EX0$0$0:A8
+L:G$IE$0$0:A8
+L:G$ET0$0$0:A9
+L:G$EX1$0$0:AA
+L:G$ET1$0$0:AB
+L:G$ES$0$0:AC
+L:G$EA$0$0:AF
+L:G$P3$0$0:B0
+L:G$P3_0$0$0:B0
+L:G$RXD$0$0:B0
+L:G$P3_1$0$0:B1
+L:G$TXD$0$0:B1
+L:G$INT0$0$0:B2
+L:G$P3_2$0$0:B2
+L:G$INT1$0$0:B3
+L:G$P3_3$0$0:B3
+L:G$P3_4$0$0:B4
+L:G$T0$0$0:B4
+L:G$P3_5$0$0:B5
+L:G$T1$0$0:B5
+L:G$P3_6$0$0:B6
+L:G$WR$0$0:B6
+L:G$P3_7$0$0:B7
+L:G$RD$0$0:B7
+L:G$IP$0$0:B8
+L:G$PX0$0$0:B8
+L:G$PT0$0$0:B9
+L:G$PX1$0$0:BA
+L:G$PT1$0$0:BB
+L:G$PS$0$0:BC
+L:G$P$0$0:D0
+L:G$PSW$0$0:D0
+L:G$F1$0$0:D1
+L:G$OV$0$0:D2
+L:G$RS0$0$0:D3
+L:G$RS1$0$0:D4
+L:G$F0$0$0:D5
+L:G$AC$0$0:D6
+L:G$CY$0$0:D7
+L:G$ACC$0$0:E0
+L:G$B$0$0:F0
+L:G$state$0$0:8
+L:G$row$0$0:9
+L:A$keypad_display$381:0
+L:A$keypad_display$403:3
+L:A$keypad_display$405:6
+L:A$keypad_display$396:61
+L:A$keypad_display$434:64
+L:C$keypad_display.c$38$0$0:64
+L:C$keypad_display.c$40$1$1:64
+L:G$main$0$0:64
+L:A$keypad_display$435:65
+L:A$keypad_display$436:67
+L:A$keypad_display$438:69
+L:A$keypad_display$439:6A
+L:A$keypad_display$440:6C
+L:A$keypad_display$441:6E
+L:A$keypad_display$442:70
+L:A$keypad_display$443:72
+L:A$keypad_display$444:74
+L:A$keypad_display$447:76
+L:C$keypad_display.c$42$3$3:76
+L:A$keypad_display$448:78
+L:A$keypad_display$449:7A
+L:A$keypad_display$450:7C
+L:A$keypad_display$451:7E
+L:A$keypad_display$452:80
+L:A$keypad_display$453:82
+L:A$keypad_display$454:83
+L:A$keypad_display$455:84
+L:A$keypad_display$459:86
+L:C$keypad_display.c$48$3$3:86
+L:A$keypad_display$463:89
+L:C$keypad_display.c$53$3$3:89
+L:A$keypad_display$466:8C
+L:C$keypad_display.c$54$3$3:8C
+L:A$keypad_display$469:8F
+L:C$keypad_display.c$56$3$3:8F
+L:A$keypad_display$470:91
+L:A$keypad_display$473:94
+L:C$keypad_display.c$57$4$4:94
+L:A$keypad_display$474:97
+L:A$keypad_display$478:99
+L:C$keypad_display.c$58$3$3:99
+L:A$keypad_display$479:9B
+L:A$keypad_display$482:9E
+L:C$keypad_display.c$59$4$5:9E
+L:A$keypad_display$483:A1
+L:A$keypad_display$487:A3
+L:C$keypad_display.c$60$3$3:A3
+L:A$keypad_display$488:A5
+L:A$keypad_display$491:A8
+L:C$keypad_display.c$61$4$6:A8
+L:A$keypad_display$492:AB
+L:A$keypad_display$496:AD
+L:C$keypad_display.c$62$3$3:AD
+L:A$keypad_display$497:AF
+L:A$keypad_display$498:B2
+L:A$keypad_display$502:B5
+L:C$keypad_display.c$63$4$7:B5
+L:A$keypad_display$508:B8
+L:C$keypad_display.c$65$3$3:B8
+L:C$keypad_display.c$68$3$3:B8
+L:A$keypad_display$509:B9
+L:A$keypad_display$510:BC
+L:A$keypad_display$511:BD
+L:A$keypad_display$512:C0
+L:A$keypad_display$514:C2
+L:A$keypad_display$515:C4
+L:A$keypad_display$516:C7
+L:A$keypad_display$517:C8
+L:A$keypad_display$518:CB
+L:A$keypad_display$520:CD
+L:A$keypad_display$521:CF
+L:A$keypad_display$522:D2
+L:A$keypad_display$523:D3
+L:A$keypad_display$524:D6
+L:A$keypad_display$526:D8
+L:A$keypad_display$527:DA
+L:A$keypad_display$528:DD
+L:A$keypad_display$529:DE
+L:A$keypad_display$530:E1
+L:A$keypad_display$534:E3
+L:C$keypad_display.c$69$4$9:E3
+L:A$keypad_display$538:E5
+L:C$keypad_display.c$70$4$9:E5
+L:A$keypad_display$539:E7
+L:A$keypad_display$540:EA
+L:A$keypad_display$541:EB
+L:A$keypad_display$546:ED
+L:C$keypad_display.c$71$4$9:ED
+L:C$keypad_display.c$72$4$9:ED
+L:A$keypad_display$550:EF
+L:C$keypad_display.c$73$4$9:EF
+L:A$keypad_display$551:F1
+L:A$keypad_display$552:F4
+L:A$keypad_display$553:F5
+L:A$keypad_display$558:F7
+L:C$keypad_display.c$74$4$9:F7
+L:C$keypad_display.c$75$4$9:F7
+L:A$keypad_display$562:F9
+L:C$keypad_display.c$76$4$9:F9
+L:A$keypad_display$563:FB
+L:A$keypad_display$564:FE
+L:A$keypad_display$565:FF
+L:A$keypad_display$570:101
+L:C$keypad_display.c$77$4$9:101
+L:C$keypad_display.c$78$4$9:101
+L:A$keypad_display$574:103
+L:C$keypad_display.c$79$4$9:103
+L:A$keypad_display$575:105
+L:A$keypad_display$576:108
+L:A$keypad_display$577:109
+L:A$keypad_display$583:10B
+L:C$keypad_display.c$41$2$2:10B
+L:C$keypad_display.c$81$2$2:10B
+L:A$keypad_display$584:10D
+L:A$keypad_display$585:10E
+L:A$keypad_display$586:111
+L:A$keypad_display$590:113
+L:C$keypad_display.c$84$1$1:113
+L:XG$main$0$0:113
+L:Fkeypad_display$keypad$0$0:11A
+L:Fkeypad_display$display_0$0$0:11E
+L:Fkeypad_display$display_1$0$0:122
+L:Fkeypad_display$display_2$0$0:126
+L:Fkeypad_display$display_3$0$0:12A
diff --git a/demo/keypad_display.hashes b/demo/keypad_display.hashes
new file mode 100644
index 0000000..55868bd
--- /dev/null
+++ b/demo/keypad_display.hashes
@@ -0,0 +1 @@
+E44E4DC2094E8EB729FE653002B40A33 "keypad_display.c"
diff --git a/demo/keypad_display.hex b/demo/keypad_display.hex
new file mode 100644
index 0000000..b62bfae
--- /dev/null
+++ b/demo/keypad_display.hex
@@ -0,0 +1,49 @@
+:03000000020008F3
+:0300610002000397
+:0500030012006480FE04
+:05006400E4F509F50AB6
+:0A006900C3E5099404E50A648094DD
+:0A0073008050EEE509241AF582E53D
+:0A007D000A3401F583E493F5908541
+:06008700900853080F630E
+:08008D00080FE50830E00575DD
+:040095000800801FC0
+:0A009900E50830E105750801801547
+:0A00A300E50830E205750802800B45
+:0800AD00E50820E30302010B4A
+:0300B500750803C8
+:0A00B800E4B50906E4B50A0280234E
+:0A00C2007401B50906E4B50A0280D6
+:0100CC002211
+:0A00CD007402B50906E4B50A0280CA
+:0100D7002107
+:0A00D8007403B50906E4B50A0280BE
+:0100E20020FD
+:0200E300802675
+:0A00E500E50890011E93F5B0801CA1
+:0A00EF00E50890012293F5B080129D
+:0A00F900E50890012693F5B0800899
+:08010300E50890012A93F5B014
+:07010B000509E4B509020536
+:010112000AE2
+:030113000200697E
+:04011A00EFDFBF7FD5
+:04011E00F9647048C8
+:0401220059524240AC
+:04012600F84050C687
+:04012A0079C049C08F
+:06003700E478FFF6D8FD9D
+:080015007900E94400601B7A48
+:05001D000090012E78A7
+:030022000075A0C6
+:0A00250000E493F2A308B8000205FE
+:08002F00A0D9F4DAF275A0FF7C
+:08003D007800E84400600A7934
+:030045000075A0A3
+:0600480000E4F309D8FCFE
+:08004E007800E84400600C7921
+:0B00560000900000E4F0A3D8FCD9FAF1
+:0300080075810AF5
+:0A000B00120116E5826003020003F3
+:0401160075820022CC
+:00000001FF
diff --git a/demo/keypad_display.ihx b/demo/keypad_display.ihx
new file mode 100644
index 0000000..b62bfae
--- /dev/null
+++ b/demo/keypad_display.ihx
@@ -0,0 +1,49 @@
+:03000000020008F3
+:0300610002000397
+:0500030012006480FE04
+:05006400E4F509F50AB6
+:0A006900C3E5099404E50A648094DD
+:0A0073008050EEE509241AF582E53D
+:0A007D000A3401F583E493F5908541
+:06008700900853080F630E
+:08008D00080FE50830E00575DD
+:040095000800801FC0
+:0A009900E50830E105750801801547
+:0A00A300E50830E205750802800B45
+:0800AD00E50820E30302010B4A
+:0300B500750803C8
+:0A00B800E4B50906E4B50A0280234E
+:0A00C2007401B50906E4B50A0280D6
+:0100CC002211
+:0A00CD007402B50906E4B50A0280CA
+:0100D7002107
+:0A00D8007403B50906E4B50A0280BE
+:0100E20020FD
+:0200E300802675
+:0A00E500E50890011E93F5B0801CA1
+:0A00EF00E50890012293F5B080129D
+:0A00F900E50890012693F5B0800899
+:08010300E50890012A93F5B014
+:07010B000509E4B509020536
+:010112000AE2
+:030113000200697E
+:04011A00EFDFBF7FD5
+:04011E00F9647048C8
+:0401220059524240AC
+:04012600F84050C687
+:04012A0079C049C08F
+:06003700E478FFF6D8FD9D
+:080015007900E94400601B7A48
+:05001D000090012E78A7
+:030022000075A0C6
+:0A00250000E493F2A308B8000205FE
+:08002F00A0D9F4DAF275A0FF7C
+:08003D007800E84400600A7934
+:030045000075A0A3
+:0600480000E4F309D8FCFE
+:08004E007800E84400600C7921
+:0B00560000900000E4F0A3D8FCD9FAF1
+:0300080075810AF5
+:0A000B00120116E5826003020003F3
+:0401160075820022CC
+:00000001FF
diff --git a/demo/keypad_display.lnk b/demo/keypad_display.lnk
new file mode 100644
index 0000000..9287b22
--- /dev/null
+++ b/demo/keypad_display.lnk
@@ -0,0 +1,19 @@
+-myuxi
+-Y
+-a 0x0100
+-v 0x0000
+-w 0x0800
+-z
+-b HOME = 0x0000
+-b ISEG = 0x0000
+-b BSEG = 0x0000
+-k /usr/libexec/sdcc/../share/sdcc/lib/small
+-k /usr/share/sdcc/lib/small
+-l mcs51
+-l libsdcc
+-l libint
+-l liblong
+-l libfloat
+keypad_display.rel
+
+-e
diff --git a/demo/keypad_display.lst b/demo/keypad_display.lst
new file mode 100644
index 0000000..439d5d9
--- /dev/null
+++ b/demo/keypad_display.lst
@@ -0,0 +1,624 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+ 4 ; This file was generated Tue Oct 27 23:03:55 2009
+ 5 ;--------------------------------------------------------
+ 6 .module keypad_display
+ 7 .optsdcc -mmcs51 --model-small
+ 8
+ 9 ;--------------------------------------------------------
+ 10 ; Public variables in this module
+ 11 ;--------------------------------------------------------
+ 12 .globl _main
+ 13 .globl _CY
+ 14 .globl _AC
+ 15 .globl _F0
+ 16 .globl _RS1
+ 17 .globl _RS0
+ 18 .globl _OV
+ 19 .globl _F1
+ 20 .globl _P
+ 21 .globl _PS
+ 22 .globl _PT1
+ 23 .globl _PX1
+ 24 .globl _PT0
+ 25 .globl _PX0
+ 26 .globl _RD
+ 27 .globl _WR
+ 28 .globl _T1
+ 29 .globl _T0
+ 30 .globl _INT1
+ 31 .globl _INT0
+ 32 .globl _TXD
+ 33 .globl _RXD
+ 34 .globl _P3_7
+ 35 .globl _P3_6
+ 36 .globl _P3_5
+ 37 .globl _P3_4
+ 38 .globl _P3_3
+ 39 .globl _P3_2
+ 40 .globl _P3_1
+ 41 .globl _P3_0
+ 42 .globl _EA
+ 43 .globl _ES
+ 44 .globl _ET1
+ 45 .globl _EX1
+ 46 .globl _ET0
+ 47 .globl _EX0
+ 48 .globl _P2_7
+ 49 .globl _P2_6
+ 50 .globl _P2_5
+ 51 .globl _P2_4
+ 52 .globl _P2_3
+ 53 .globl _P2_2
+ 54 .globl _P2_1
+ 55 .globl _P2_0
+ 56 .globl _SM0
+ 57 .globl _SM1
+ 58 .globl _SM2
+ 59 .globl _REN
+ 60 .globl _TB8
+ 61 .globl _RB8
+ 62 .globl _TI
+ 63 .globl _RI
+ 64 .globl _P1_7
+ 65 .globl _P1_6
+ 66 .globl _P1_5
+ 67 .globl _P1_4
+ 68 .globl _P1_3
+ 69 .globl _P1_2
+ 70 .globl _P1_1
+ 71 .globl _P1_0
+ 72 .globl _TF1
+ 73 .globl _TR1
+ 74 .globl _TF0
+ 75 .globl _TR0
+ 76 .globl _IE1
+ 77 .globl _IT1
+ 78 .globl _IE0
+ 79 .globl _IT0
+ 80 .globl _P0_7
+ 81 .globl _P0_6
+ 82 .globl _P0_5
+ 83 .globl _P0_4
+ 84 .globl _P0_3
+ 85 .globl _P0_2
+ 86 .globl _P0_1
+ 87 .globl _P0_0
+ 88 .globl _B
+ 89 .globl _ACC
+ 90 .globl _PSW
+ 91 .globl _IP
+ 92 .globl _P3
+ 93 .globl _IE
+ 94 .globl _P2
+ 95 .globl _SBUF
+ 96 .globl _SCON
+ 97 .globl _P1
+ 98 .globl _TH1
+ 99 .globl _TH0
+ 100 .globl _TL1
+ 101 .globl _TL0
+ 102 .globl _TMOD
+ 103 .globl _TCON
+ 104 .globl _PCON
+ 105 .globl _DPH
+ 106 .globl _DPL
+ 107 .globl _SP
+ 108 .globl _P0
+ 109 .globl _row
+ 110 .globl _state
+ 111 ;--------------------------------------------------------
+ 112 ; special function registers
+ 113 ;--------------------------------------------------------
+ 114 .area RSEG (DATA)
+ 0080 115 G$P0$0$0 == 0x0080
+ 0080 116 _P0 = 0x0080
+ 0081 117 G$SP$0$0 == 0x0081
+ 0081 118 _SP = 0x0081
+ 0082 119 G$DPL$0$0 == 0x0082
+ 0082 120 _DPL = 0x0082
+ 0083 121 G$DPH$0$0 == 0x0083
+ 0083 122 _DPH = 0x0083
+ 0087 123 G$PCON$0$0 == 0x0087
+ 0087 124 _PCON = 0x0087
+ 0088 125 G$TCON$0$0 == 0x0088
+ 0088 126 _TCON = 0x0088
+ 0089 127 G$TMOD$0$0 == 0x0089
+ 0089 128 _TMOD = 0x0089
+ 008A 129 G$TL0$0$0 == 0x008a
+ 008A 130 _TL0 = 0x008a
+ 008B 131 G$TL1$0$0 == 0x008b
+ 008B 132 _TL1 = 0x008b
+ 008C 133 G$TH0$0$0 == 0x008c
+ 008C 134 _TH0 = 0x008c
+ 008D 135 G$TH1$0$0 == 0x008d
+ 008D 136 _TH1 = 0x008d
+ 0090 137 G$P1$0$0 == 0x0090
+ 0090 138 _P1 = 0x0090
+ 0098 139 G$SCON$0$0 == 0x0098
+ 0098 140 _SCON = 0x0098
+ 0099 141 G$SBUF$0$0 == 0x0099
+ 0099 142 _SBUF = 0x0099
+ 00A0 143 G$P2$0$0 == 0x00a0
+ 00A0 144 _P2 = 0x00a0
+ 00A8 145 G$IE$0$0 == 0x00a8
+ 00A8 146 _IE = 0x00a8
+ 00B0 147 G$P3$0$0 == 0x00b0
+ 00B0 148 _P3 = 0x00b0
+ 00B8 149 G$IP$0$0 == 0x00b8
+ 00B8 150 _IP = 0x00b8
+ 00D0 151 G$PSW$0$0 == 0x00d0
+ 00D0 152 _PSW = 0x00d0
+ 00E0 153 G$ACC$0$0 == 0x00e0
+ 00E0 154 _ACC = 0x00e0
+ 00F0 155 G$B$0$0 == 0x00f0
+ 00F0 156 _B = 0x00f0
+ 157 ;--------------------------------------------------------
+ 158 ; special function bits
+ 159 ;--------------------------------------------------------
+ 160 .area RSEG (DATA)
+ 0080 161 G$P0_0$0$0 == 0x0080
+ 0080 162 _P0_0 = 0x0080
+ 0081 163 G$P0_1$0$0 == 0x0081
+ 0081 164 _P0_1 = 0x0081
+ 0082 165 G$P0_2$0$0 == 0x0082
+ 0082 166 _P0_2 = 0x0082
+ 0083 167 G$P0_3$0$0 == 0x0083
+ 0083 168 _P0_3 = 0x0083
+ 0084 169 G$P0_4$0$0 == 0x0084
+ 0084 170 _P0_4 = 0x0084
+ 0085 171 G$P0_5$0$0 == 0x0085
+ 0085 172 _P0_5 = 0x0085
+ 0086 173 G$P0_6$0$0 == 0x0086
+ 0086 174 _P0_6 = 0x0086
+ 0087 175 G$P0_7$0$0 == 0x0087
+ 0087 176 _P0_7 = 0x0087
+ 0088 177 G$IT0$0$0 == 0x0088
+ 0088 178 _IT0 = 0x0088
+ 0089 179 G$IE0$0$0 == 0x0089
+ 0089 180 _IE0 = 0x0089
+ 008A 181 G$IT1$0$0 == 0x008a
+ 008A 182 _IT1 = 0x008a
+ 008B 183 G$IE1$0$0 == 0x008b
+ 008B 184 _IE1 = 0x008b
+ 008C 185 G$TR0$0$0 == 0x008c
+ 008C 186 _TR0 = 0x008c
+ 008D 187 G$TF0$0$0 == 0x008d
+ 008D 188 _TF0 = 0x008d
+ 008E 189 G$TR1$0$0 == 0x008e
+ 008E 190 _TR1 = 0x008e
+ 008F 191 G$TF1$0$0 == 0x008f
+ 008F 192 _TF1 = 0x008f
+ 0090 193 G$P1_0$0$0 == 0x0090
+ 0090 194 _P1_0 = 0x0090
+ 0091 195 G$P1_1$0$0 == 0x0091
+ 0091 196 _P1_1 = 0x0091
+ 0092 197 G$P1_2$0$0 == 0x0092
+ 0092 198 _P1_2 = 0x0092
+ 0093 199 G$P1_3$0$0 == 0x0093
+ 0093 200 _P1_3 = 0x0093
+ 0094 201 G$P1_4$0$0 == 0x0094
+ 0094 202 _P1_4 = 0x0094
+ 0095 203 G$P1_5$0$0 == 0x0095
+ 0095 204 _P1_5 = 0x0095
+ 0096 205 G$P1_6$0$0 == 0x0096
+ 0096 206 _P1_6 = 0x0096
+ 0097 207 G$P1_7$0$0 == 0x0097
+ 0097 208 _P1_7 = 0x0097
+ 0098 209 G$RI$0$0 == 0x0098
+ 0098 210 _RI = 0x0098
+ 0099 211 G$TI$0$0 == 0x0099
+ 0099 212 _TI = 0x0099
+ 009A 213 G$RB8$0$0 == 0x009a
+ 009A 214 _RB8 = 0x009a
+ 009B 215 G$TB8$0$0 == 0x009b
+ 009B 216 _TB8 = 0x009b
+ 009C 217 G$REN$0$0 == 0x009c
+ 009C 218 _REN = 0x009c
+ 009D 219 G$SM2$0$0 == 0x009d
+ 009D 220 _SM2 = 0x009d
+ 009E 221 G$SM1$0$0 == 0x009e
+ 009E 222 _SM1 = 0x009e
+ 009F 223 G$SM0$0$0 == 0x009f
+ 009F 224 _SM0 = 0x009f
+ 00A0 225 G$P2_0$0$0 == 0x00a0
+ 00A0 226 _P2_0 = 0x00a0
+ 00A1 227 G$P2_1$0$0 == 0x00a1
+ 00A1 228 _P2_1 = 0x00a1
+ 00A2 229 G$P2_2$0$0 == 0x00a2
+ 00A2 230 _P2_2 = 0x00a2
+ 00A3 231 G$P2_3$0$0 == 0x00a3
+ 00A3 232 _P2_3 = 0x00a3
+ 00A4 233 G$P2_4$0$0 == 0x00a4
+ 00A4 234 _P2_4 = 0x00a4
+ 00A5 235 G$P2_5$0$0 == 0x00a5
+ 00A5 236 _P2_5 = 0x00a5
+ 00A6 237 G$P2_6$0$0 == 0x00a6
+ 00A6 238 _P2_6 = 0x00a6
+ 00A7 239 G$P2_7$0$0 == 0x00a7
+ 00A7 240 _P2_7 = 0x00a7
+ 00A8 241 G$EX0$0$0 == 0x00a8
+ 00A8 242 _EX0 = 0x00a8
+ 00A9 243 G$ET0$0$0 == 0x00a9
+ 00A9 244 _ET0 = 0x00a9
+ 00AA 245 G$EX1$0$0 == 0x00aa
+ 00AA 246 _EX1 = 0x00aa
+ 00AB 247 G$ET1$0$0 == 0x00ab
+ 00AB 248 _ET1 = 0x00ab
+ 00AC 249 G$ES$0$0 == 0x00ac
+ 00AC 250 _ES = 0x00ac
+ 00AF 251 G$EA$0$0 == 0x00af
+ 00AF 252 _EA = 0x00af
+ 00B0 253 G$P3_0$0$0 == 0x00b0
+ 00B0 254 _P3_0 = 0x00b0
+ 00B1 255 G$P3_1$0$0 == 0x00b1
+ 00B1 256 _P3_1 = 0x00b1
+ 00B2 257 G$P3_2$0$0 == 0x00b2
+ 00B2 258 _P3_2 = 0x00b2
+ 00B3 259 G$P3_3$0$0 == 0x00b3
+ 00B3 260 _P3_3 = 0x00b3
+ 00B4 261 G$P3_4$0$0 == 0x00b4
+ 00B4 262 _P3_4 = 0x00b4
+ 00B5 263 G$P3_5$0$0 == 0x00b5
+ 00B5 264 _P3_5 = 0x00b5
+ 00B6 265 G$P3_6$0$0 == 0x00b6
+ 00B6 266 _P3_6 = 0x00b6
+ 00B7 267 G$P3_7$0$0 == 0x00b7
+ 00B7 268 _P3_7 = 0x00b7
+ 00B0 269 G$RXD$0$0 == 0x00b0
+ 00B0 270 _RXD = 0x00b0
+ 00B1 271 G$TXD$0$0 == 0x00b1
+ 00B1 272 _TXD = 0x00b1
+ 00B2 273 G$INT0$0$0 == 0x00b2
+ 00B2 274 _INT0 = 0x00b2
+ 00B3 275 G$INT1$0$0 == 0x00b3
+ 00B3 276 _INT1 = 0x00b3
+ 00B4 277 G$T0$0$0 == 0x00b4
+ 00B4 278 _T0 = 0x00b4
+ 00B5 279 G$T1$0$0 == 0x00b5
+ 00B5 280 _T1 = 0x00b5
+ 00B6 281 G$WR$0$0 == 0x00b6
+ 00B6 282 _WR = 0x00b6
+ 00B7 283 G$RD$0$0 == 0x00b7
+ 00B7 284 _RD = 0x00b7
+ 00B8 285 G$PX0$0$0 == 0x00b8
+ 00B8 286 _PX0 = 0x00b8
+ 00B9 287 G$PT0$0$0 == 0x00b9
+ 00B9 288 _PT0 = 0x00b9
+ 00BA 289 G$PX1$0$0 == 0x00ba
+ 00BA 290 _PX1 = 0x00ba
+ 00BB 291 G$PT1$0$0 == 0x00bb
+ 00BB 292 _PT1 = 0x00bb
+ 00BC 293 G$PS$0$0 == 0x00bc
+ 00BC 294 _PS = 0x00bc
+ 00D0 295 G$P$0$0 == 0x00d0
+ 00D0 296 _P = 0x00d0
+ 00D1 297 G$F1$0$0 == 0x00d1
+ 00D1 298 _F1 = 0x00d1
+ 00D2 299 G$OV$0$0 == 0x00d2
+ 00D2 300 _OV = 0x00d2
+ 00D3 301 G$RS0$0$0 == 0x00d3
+ 00D3 302 _RS0 = 0x00d3
+ 00D4 303 G$RS1$0$0 == 0x00d4
+ 00D4 304 _RS1 = 0x00d4
+ 00D5 305 G$F0$0$0 == 0x00d5
+ 00D5 306 _F0 = 0x00d5
+ 00D6 307 G$AC$0$0 == 0x00d6
+ 00D6 308 _AC = 0x00d6
+ 00D7 309 G$CY$0$0 == 0x00d7
+ 00D7 310 _CY = 0x00d7
+ 311 ;--------------------------------------------------------
+ 312 ; overlayable register banks
+ 313 ;--------------------------------------------------------
+ 314 .area REG_BANK_0 (REL,OVR,DATA)
+ 0000 315 .ds 8
+ 316 ;--------------------------------------------------------
+ 317 ; internal ram data
+ 318 ;--------------------------------------------------------
+ 319 .area DSEG (DATA)
+ 0000 320 G$state$0$0==.
+ 0000 321 _state::
+ 0000 322 .ds 1
+ 0001 323 G$row$0$0==.
+ 0001 324 _row::
+ 0001 325 .ds 2
+ 326 ;--------------------------------------------------------
+ 327 ; overlayable items in internal ram
+ 328 ;--------------------------------------------------------
+ 329 .area OSEG (OVR,DATA)
+ 330 ;--------------------------------------------------------
+ 331 ; Stack segment in internal ram
+ 332 ;--------------------------------------------------------
+ 333 .area SSEG (DATA)
+ 0000 334 __start__stack:
+ 0000 335 .ds 1
+ 336
+ 337 ;--------------------------------------------------------
+ 338 ; indirectly addressable internal ram data
+ 339 ;--------------------------------------------------------
+ 340 .area ISEG (DATA)
+ 341 ;--------------------------------------------------------
+ 342 ; absolute internal ram data
+ 343 ;--------------------------------------------------------
+ 344 .area IABS (ABS,DATA)
+ 345 .area IABS (ABS,DATA)
+ 346 ;--------------------------------------------------------
+ 347 ; bit data
+ 348 ;--------------------------------------------------------
+ 349 .area BSEG (BIT)
+ 350 ;--------------------------------------------------------
+ 351 ; paged external ram data
+ 352 ;--------------------------------------------------------
+ 353 .area PSEG (PAG,XDATA)
+ 354 ;--------------------------------------------------------
+ 355 ; external ram data
+ 356 ;--------------------------------------------------------
+ 357 .area XSEG (XDATA)
+ 358 ;--------------------------------------------------------
+ 359 ; absolute external ram data
+ 360 ;--------------------------------------------------------
+ 361 .area XABS (ABS,XDATA)
+ 362 ;--------------------------------------------------------
+ 363 ; external initialized ram data
+ 364 ;--------------------------------------------------------
+ 365 .area XISEG (XDATA)
+ 366 .area HOME (CODE)
+ 367 .area GSINIT0 (CODE)
+ 368 .area GSINIT1 (CODE)
+ 369 .area GSINIT2 (CODE)
+ 370 .area GSINIT3 (CODE)
+ 371 .area GSINIT4 (CODE)
+ 372 .area GSINIT5 (CODE)
+ 373 .area GSINIT (CODE)
+ 374 .area GSFINAL (CODE)
+ 375 .area CSEG (CODE)
+ 376 ;--------------------------------------------------------
+ 377 ; interrupt vector
+ 378 ;--------------------------------------------------------
+ 379 .area HOME (CODE)
+ 0000 380 __interrupt_vect:
+ 0000 02s00r00 381 ljmp __sdcc_gsinit_startup
+ 382 ;--------------------------------------------------------
+ 383 ; global & static initialisations
+ 384 ;--------------------------------------------------------
+ 385 .area HOME (CODE)
+ 386 .area GSINIT (CODE)
+ 387 .area GSFINAL (CODE)
+ 388 .area GSINIT (CODE)
+ 389 .globl __sdcc_gsinit_startup
+ 390 .globl __sdcc_program_startup
+ 391 .globl __start__stack
+ 392 .globl __mcs51_genXINIT
+ 393 .globl __mcs51_genXRAMCLEAR
+ 394 .globl __mcs51_genRAMCLEAR
+ 395 .area GSFINAL (CODE)
+ 0000 02s00r03 396 ljmp __sdcc_program_startup
+ 397 ;--------------------------------------------------------
+ 398 ; Home
+ 399 ;--------------------------------------------------------
+ 400 .area HOME (CODE)
+ 401 .area HOME (CODE)
+ 0003 402 __sdcc_program_startup:
+ 0003 12s00r00 403 lcall _main
+ 404 ; return from main will lock up
+ 0006 80 FE 405 sjmp .
+ 406 ;--------------------------------------------------------
+ 407 ; code
+ 408 ;--------------------------------------------------------
+ 409 .area CSEG (CODE)
+ 410 ;------------------------------------------------------------
+ 411 ;Allocation info for local variables in function 'main'
+ 412 ;------------------------------------------------------------
+ 413 ;------------------------------------------------------------
+ 0000 414 G$main$0$0 ==.
+ 0000 415 C$keypad_display.c$38$0$0 ==.
+ 416 ; keypad_display.c:38: int main()
+ 417 ; -----------------------------------------
+ 418 ; function main
+ 419 ; -----------------------------------------
+ 0000 420 _main:
+ 0002 421 ar2 = 0x02
+ 0003 422 ar3 = 0x03
+ 0004 423 ar4 = 0x04
+ 0005 424 ar5 = 0x05
+ 0006 425 ar6 = 0x06
+ 0007 426 ar7 = 0x07
+ 0000 427 ar0 = 0x00
+ 0001 428 ar1 = 0x01
+ 0000 429 C$keypad_display.c$40$1$1 ==.
+ 430 ; keypad_display.c:40: while(1) {
+ 0000 431 00123$:
+ 0000 432 C$keypad_display.c$41$2$2 ==.
+ 433 ; keypad_display.c:41: for(row=0; row<4; row++) {
+ 0000 E4 434 clr a
+ 0001 F5*01 435 mov _row,a
+ 0003 F5*02 436 mov (_row + 1),a
+ 0005 437 00118$:
+ 0005 C3 438 clr c
+ 0006 E5*01 439 mov a,_row
+ 0008 94 04 440 subb a,#0x04
+ 000A E5*02 441 mov a,(_row + 1)
+ 000C 64 80 442 xrl a,#0x80
+ 000E 94 80 443 subb a,#0x80
+ 0010 50 EE 444 jnc 00123$
+ 0012 445 C$keypad_display.c$42$3$3 ==.
+ 446 ; keypad_display.c:42: P1=keypad[row];
+ 0012 E5*01 447 mov a,_row
+ 0014 24r00 448 add a,#_keypad
+ 0016 F5 82 449 mov dpl,a
+ 0018 E5*02 450 mov a,(_row + 1)
+ 001A 34s00 451 addc a,#(_keypad >> 8)
+ 001C F5 83 452 mov dph,a
+ 001E E4 453 clr a
+ 001F 93 454 movc a,@a+dptr
+ 0020 F5 90 455 mov _P1,a
+ 0022 456 C$keypad_display.c$48$3$3 ==.
+ 457 ; keypad_display.c:48: _endasm;
+ 458
+ 0022 85 90*00 459 mov _state, P1
+ 460
+ 0025 461 C$keypad_display.c$53$3$3 ==.
+ 462 ; keypad_display.c:53: state&=0x0f;
+ 0025 53r00 0F 463 anl _state,#0x0F
+ 0028 464 C$keypad_display.c$54$3$3 ==.
+ 465 ; keypad_display.c:54: state^=0x0f;
+ 0028 63r00 0F 466 xrl _state,#0x0F
+ 002B 467 C$keypad_display.c$56$3$3 ==.
+ 468 ; keypad_display.c:56: if(state & 1) {
+ 002B E5*00 469 mov a,_state
+ 002D 30 E0 05 470 jnb acc.0,00111$
+ 0030 471 C$keypad_display.c$57$4$4 ==.
+ 472 ; keypad_display.c:57: state=0;
+ 0030 75*00 00 473 mov _state,#0x00
+ 0033 80 1F 474 sjmp 00112$
+ 0035 475 00111$:
+ 0035 476 C$keypad_display.c$58$3$3 ==.
+ 477 ; keypad_display.c:58: } else if(state & 2) {
+ 0035 E5*00 478 mov a,_state
+ 0037 30 E1 05 479 jnb acc.1,00108$
+ 003A 480 C$keypad_display.c$59$4$5 ==.
+ 481 ; keypad_display.c:59: state=1;
+ 003A 75*00 01 482 mov _state,#0x01
+ 003D 80 15 483 sjmp 00112$
+ 003F 484 00108$:
+ 003F 485 C$keypad_display.c$60$3$3 ==.
+ 486 ; keypad_display.c:60: } else if(state & 4) {
+ 003F E5*00 487 mov a,_state
+ 0041 30 E2 05 488 jnb acc.2,00105$
+ 0044 489 C$keypad_display.c$61$4$6 ==.
+ 490 ; keypad_display.c:61: state=2;
+ 0044 75*00 02 491 mov _state,#0x02
+ 0047 80 0B 492 sjmp 00112$
+ 0049 493 00105$:
+ 0049 494 C$keypad_display.c$62$3$3 ==.
+ 495 ; keypad_display.c:62: } else if(state & 8) {
+ 0049 E5*00 496 mov a,_state
+ 004B 20 E3 03 497 jb acc.3,00142$
+ 004E 02s00rA7 498 ljmp 00120$
+ 0051 499 00142$:
+ 0051 500 C$keypad_display.c$63$4$7 ==.
+ 501 ; keypad_display.c:63: state=3;
+ 0051 75*00 03 502 mov _state,#0x03
+ 0054 503 C$keypad_display.c$65$3$3 ==.
+ 504 ; keypad_display.c:65: continue;
+ 0054 505 00112$:
+ 0054 506 C$keypad_display.c$68$3$3 ==.
+ 507 ; keypad_display.c:68: switch(row) {
+ 0054 E4 508 clr a
+ 0055 B5*01 06 509 cjne a,_row,00143$
+ 0058 E4 510 clr a
+ 0059 B5*02 02 511 cjne a,(_row + 1),00143$
+ 005C 80 23 512 sjmp 00113$
+ 005E 513 00143$:
+ 005E 74 01 514 mov a,#0x01
+ 0060 B5*01 06 515 cjne a,_row,00144$
+ 0063 E4 516 clr a
+ 0064 B5*02 02 517 cjne a,(_row + 1),00144$
+ 0067 80 22 518 sjmp 00114$
+ 0069 519 00144$:
+ 0069 74 02 520 mov a,#0x02
+ 006B B5*01 06 521 cjne a,_row,00145$
+ 006E E4 522 clr a
+ 006F B5*02 02 523 cjne a,(_row + 1),00145$
+ 0072 80 21 524 sjmp 00115$
+ 0074 525 00145$:
+ 0074 74 03 526 mov a,#0x03
+ 0076 B5*01 06 527 cjne a,_row,00146$
+ 0079 E4 528 clr a
+ 007A B5*02 02 529 cjne a,(_row + 1),00146$
+ 007D 80 20 530 sjmp 00116$
+ 007F 531 00146$:
+ 007F 532 C$keypad_display.c$69$4$9 ==.
+ 533 ; keypad_display.c:69: case 0:
+ 007F 80 26 534 sjmp 00120$
+ 0081 535 00113$:
+ 0081 536 C$keypad_display.c$70$4$9 ==.
+ 537 ; keypad_display.c:70: P3=display_0[state];
+ 0081 E5*00 538 mov a,_state
+ 0083 90s00r04 539 mov dptr,#_display_0
+ 0086 93 540 movc a,@a+dptr
+ 0087 F5 B0 541 mov _P3,a
+ 0089 542 C$keypad_display.c$71$4$9 ==.
+ 543 ; keypad_display.c:71: break;
+ 0089 544 C$keypad_display.c$72$4$9 ==.
+ 545 ; keypad_display.c:72: case 1:
+ 0089 80 1C 546 sjmp 00120$
+ 008B 547 00114$:
+ 008B 548 C$keypad_display.c$73$4$9 ==.
+ 549 ; keypad_display.c:73: P3=display_1[state];
+ 008B E5*00 550 mov a,_state
+ 008D 90s00r08 551 mov dptr,#_display_1
+ 0090 93 552 movc a,@a+dptr
+ 0091 F5 B0 553 mov _P3,a
+ 0093 554 C$keypad_display.c$74$4$9 ==.
+ 555 ; keypad_display.c:74: break;
+ 0093 556 C$keypad_display.c$75$4$9 ==.
+ 557 ; keypad_display.c:75: case 2:
+ 0093 80 12 558 sjmp 00120$
+ 0095 559 00115$:
+ 0095 560 C$keypad_display.c$76$4$9 ==.
+ 561 ; keypad_display.c:76: P3=display_2[state];
+ 0095 E5*00 562 mov a,_state
+ 0097 90s00r0C 563 mov dptr,#_display_2
+ 009A 93 564 movc a,@a+dptr
+ 009B F5 B0 565 mov _P3,a
+ 009D 566 C$keypad_display.c$77$4$9 ==.
+ 567 ; keypad_display.c:77: break;
+ 009D 568 C$keypad_display.c$78$4$9 ==.
+ 569 ; keypad_display.c:78: case 3:
+ 009D 80 08 570 sjmp 00120$
+ 009F 571 00116$:
+ 009F 572 C$keypad_display.c$79$4$9 ==.
+ 573 ; keypad_display.c:79: P3=display_3[state];
+ 009F E5*00 574 mov a,_state
+ 00A1 90s00r10 575 mov dptr,#_display_3
+ 00A4 93 576 movc a,@a+dptr
+ 00A5 F5 B0 577 mov _P3,a
+ 00A7 578 C$keypad_display.c$81$2$2 ==.
+ 579 ; keypad_display.c:81: }
+ 00A7 580 00120$:
+ 00A7 581 C$keypad_display.c$41$2$2 ==.
+ 582 ; keypad_display.c:41: for(row=0; row<4; row++) {
+ 00A7 05*01 583 inc _row
+ 00A9 E4 584 clr a
+ 00AA B5*01 02 585 cjne a,_row,00147$
+ 00AD 05*02 586 inc (_row + 1)
+ 00AF 587 00147$:
+ 00AF 588 C$keypad_display.c$84$1$1 ==.
+ 00AF 589 XG$main$0$0 ==.
+ 00AF 02s00r05 590 ljmp 00118$
+ 591 .area CSEG (CODE)
+ 592 .area CONST (CODE)
+ 0000 593 Fkeypad_display$keypad$0$0 == .
+ 0000 594 _keypad:
+ 0000 EF 595 .db #0xEF
+ 0001 DF 596 .db #0xDF
+ 0002 BF 597 .db #0xBF
+ 0003 7F 598 .db #0x7F
+ 0004 599 Fkeypad_display$display_0$0$0 == .
+ 0004 600 _display_0:
+ 0004 F9 601 .db #0xF9
+ 0005 64 602 .db #0x64
+ 0006 70 603 .db #0x70
+ 0007 48 604 .db #0x48
+ 0008 605 Fkeypad_display$display_1$0$0 == .
+ 0008 606 _display_1:
+ 0008 59 607 .db #0x59
+ 0009 52 608 .db #0x52
+ 000A 42 609 .db #0x42
+ 000B 40 610 .db #0x40
+ 000C 611 Fkeypad_display$display_2$0$0 == .
+ 000C 612 _display_2:
+ 000C F8 613 .db #0xF8
+ 000D 40 614 .db #0x40
+ 000E 50 615 .db #0x50
+ 000F C6 616 .db #0xC6
+ 0010 617 Fkeypad_display$display_3$0$0 == .
+ 0010 618 _display_3:
+ 0010 79 619 .db #0x79
+ 0011 C0 620 .db #0xC0
+ 0012 49 621 .db #0x49
+ 0013 C0 622 .db #0xC0
+ 623 .area XINIT (CODE)
+ 624 .area CABS (ABS,CODE)
diff --git a/demo/keypad_display.map b/demo/keypad_display.map
new file mode 100644
index 0000000..276738d
--- /dev/null
+++ b/demo/keypad_display.map
@@ -0,0 +1,536 @@
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CABS 0000 0000 = 0. bytes (ABS,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:FFFFFF00 s_BSEG
+ 0C:0000 l_BIT_BANK
+ 0C:0000 l_BSEG
+ 0C:0000 l_BSEG_BYTES
+ 0C:0000 l_CABS
+ 0C:0000 l_GSINIT
+ 0C:0000 l_GSINIT1
+ 0C:0000 l_GSINIT5
+ 0C:0000 l_IABS
+ 0C:0000 l_ISEG
+ 0C:0000 l_OSEG
+ 0C:0000 l_PSEG
+ 0C:0000 l_REG_BANK_1
+ 0C:0000 l_REG_BANK_2
+ 0C:0000 l_REG_BANK_3
+ 0C:0000 l_RSEG
+ 0C:0000 l_XABS
+ 0C:0000 l_XINIT
+ 0C:0000 l_XISEG
+ 0C:0000 l_XSEG
+ 0C:0000 l__CODE
+ 0C:0000 s_BSEG_BYTES
+ 0C:0000 s_CABS
+ 0C:0000 s_DSEG
+ 0C:0000 s_HOME
+ 0C:0000 s_IABS
+ 0C:0000 s_ISEG
+ 0C:0000 s_PSEG
+ 0C:0000 s_REG_BANK_0
+ 0C:0000 s_XABS
+ 0C:0000 s_XISEG
+ 0C:0000 s_XSEG
+ 0C:0003 l_GSFINAL
+ 0C:0003 l_GSINIT0
+ 0C:0008 l_HOME
+ 0C:0008 l_REG_BANK_0
+ 0C:0008 s_GSINIT0
+ 0C:0008 s_REG_BANK_1
+ 0C:000A l_GSINIT2
+ 0C:000B s_GSINIT1
+ 0C:000B s_GSINIT2
+ 0C:000B s_RSEG
+ 0C:000B s_SSEG
+ 0C:0010 s_REG_BANK_2
+ 0C:0014 l_CONST
+ 0C:0015 s_GSINIT3
+ 0C:0018 s_BIT_BANK
+ 0C:0018 s_OSEG
+ 0C:0018 s_REG_BANK_3
+ 0C:0020 s__CODE
+ 0C:0022 l_GSINIT3
+ 0C:002A l_GSINIT4
+ 0C:0037 s_GSINIT4
+ 0C:0061 s_GSFINAL
+ 0C:0061 s_GSINIT
+ 0C:0061 s_GSINIT5
+ 0C:0064 s_CSEG
+ 0C:0080 l_DSEG
+ 0C:00B6 l_CSEG
+ 0C:00F5 l_SSEG
+ 0C:0100 l_IRAM
+ 0C:011A s_CONST
+ 0C:012E s_XINIT
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+. .ABS. 0000 0000 = 0. bytes (ABS,CON)
+
+ Value Global
+ -------- --------------------------------
+ 0080 G$P0$0$0
+ 0080 G$P0_0$0$0
+ 0080 _P0
+ 0080 _P0_0
+ 0081 G$P0_1$0$0
+ 0081 G$SP$0$0
+ 0081 _P0_1
+ 0081 _SP
+ 0082 G$DPL$0$0
+ 0082 G$P0_2$0$0
+ 0082 _DPL
+ 0082 _P0_2
+ 0083 G$DPH$0$0
+ 0083 G$P0_3$0$0
+ 0083 _DPH
+ 0083 _P0_3
+ 0084 G$P0_4$0$0
+ 0084 _P0_4
+ 0085 G$P0_5$0$0
+ 0085 _P0_5
+ 0086 G$P0_6$0$0
+ 0086 _P0_6
+ 0087 G$P0_7$0$0
+ 0087 G$PCON$0$0
+ 0087 _P0_7
+ 0087 _PCON
+ 0088 G$IT0$0$0
+ 0088 G$TCON$0$0
+ 0088 _IT0
+ 0088 _TCON
+ 0089 G$IE0$0$0
+ 0089 G$TMOD$0$0
+ 0089 _IE0
+ 0089 _TMOD
+ 008A G$IT1$0$0
+ 008A G$TL0$0$0
+ 008A _IT1
+ 008A _TL0
+ 008B G$IE1$0$0
+ 008B G$TL1$0$0
+ 008B _IE1
+ 008B _TL1
+ 008C G$TH0$0$0
+ 008C G$TR0$0$0
+ 008C _TH0
+ 008C _TR0
+ 008D G$TF0$0$0
+ 008D G$TH1$0$0
+ 008D _TF0
+ 008D _TH1
+ 008E G$TR1$0$0
+ 008E _TR1
+ 008F G$TF1$0$0
+ 008F _TF1
+ 0090 G$P1$0$0
+ 0090 G$P1_0$0$0
+ 0090 _P1
+ 0090 _P1_0
+ 0091 G$P1_1$0$0
+ 0091 _P1_1
+ 0092 G$P1_2$0$0
+ 0092 _P1_2
+ 0093 G$P1_3$0$0
+ 0093 _P1_3
+ 0094 G$P1_4$0$0
+ 0094 _P1_4
+ 0095 G$P1_5$0$0
+ 0095 _P1_5
+ 0096 G$P1_6$0$0
+ 0096 _P1_6
+ 0097 G$P1_7$0$0
+ 0097 _P1_7
+ 0098 G$RI$0$0
+ 0098 G$SCON$0$0
+ 0098 _RI
+ 0098 _SCON
+ 0099 G$SBUF$0$0
+ 0099 G$TI$0$0
+ 0099 _SBUF
+ 0099 _TI
+ 009A G$RB8$0$0
+ 009A _RB8
+ 009B G$TB8$0$0
+ 009B _TB8
+ 009C G$REN$0$0
+ 009C _REN
+ 009D G$SM2$0$0
+ 009D _SM2
+ 009E G$SM1$0$0
+ 009E _SM1
+ 009F G$SM0$0$0
+ 009F _SM0
+ 00A0 G$P2$0$0
+ 00A0 G$P2_0$0$0
+ 00A0 _P2
+ 00A0 _P2_0
+ 00A0 __XPAGE
+ 00A1 G$P2_1$0$0
+ 00A1 _P2_1
+ 00A2 G$P2_2$0$0
+ 00A2 _P2_2
+ 00A3 G$P2_3$0$0
+ 00A3 _P2_3
+ 00A4 G$P2_4$0$0
+ 00A4 _P2_4
+ 00A5 G$P2_5$0$0
+ 00A5 _P2_5
+ 00A6 G$P2_6$0$0
+ 00A6 _P2_6
+ 00A7 G$P2_7$0$0
+ 00A7 _P2_7
+ 00A8 G$EX0$0$0
+ 00A8 G$IE$0$0
+ 00A8 _EX0
+ 00A8 _IE
+ 00A9 G$ET0$0$0
+ 00A9 _ET0
+ 00AA G$EX1$0$0
+ 00AA _EX1
+ 00AB G$ET1$0$0
+ 00AB _ET1
+ 00AC G$ES$0$0
+ 00AC _ES
+ 00AF G$EA$0$0
+ 00AF _EA
+ 00B0 G$P3$0$0
+ 00B0 G$P3_0$0$0
+ 00B0 G$RXD$0$0
+ 00B0 _P3
+ 00B0 _P3_0
+ 00B0 _RXD
+ 00B1 G$P3_1$0$0
+ 00B1 G$TXD$0$0
+ 00B1 _P3_1
+ 00B1 _TXD
+ 00B2 G$INT0$0$0
+ 00B2 G$P3_2$0$0
+ 00B2 _INT0
+ 00B2 _P3_2
+ 00B3 G$INT1$0$0
+ 00B3 G$P3_3$0$0
+ 00B3 _INT1
+ 00B3 _P3_3
+ 00B4 G$P3_4$0$0
+ 00B4 G$T0$0$0
+ 00B4 _P3_4
+ 00B4 _T0
+ 00B5 G$P3_5$0$0
+ 00B5 G$T1$0$0
+ 00B5 _P3_5
+ 00B5 _T1
+ 00B6 G$P3_6$0$0
+ 00B6 G$WR$0$0
+ 00B6 _P3_6
+ 00B6 _WR
+ 00B7 G$P3_7$0$0
+ 00B7 G$RD$0$0
+ 00B7 _P3_7
+ 00B7 _RD
+ 00B8 G$IP$0$0
+ 00B8 G$PX0$0$0
+ 00B8 _IP
+ 00B8 _PX0
+ 00B9 G$PT0$0$0
+ 00B9 _PT0
+ 00BA G$PX1$0$0
+ 00BA _PX1
+ 00BB G$PT1$0$0
+ 00BB _PT1
+ 00BC G$PS$0$0
+ 00BC _PS
+ 00D0 G$P$0$0
+ 00D0 G$PSW$0$0
+ 00D0 _P
+ 00D0 _PSW
+ 00D1 G$F1$0$0
+ 00D1 _F1
+ 00D2 G$OV$0$0
+ 00D2 _OV
+ 00D3 G$RS0$0$0
+ 00D3 _RS0
+ 00D4 G$RS1$0$0
+ 00D4 _RS1
+ 00D5 G$F0$0$0
+ 00D5 _F0
+ 00D6 G$AC$0$0
+ 00D6 _AC
+ 00D7 G$CY$0$0
+ 00D7 _CY
+ 00E0 G$ACC$0$0
+ 00E0 _ACC
+ 00F0 G$B$0$0
+ 00F0 _B
+
+
+
+
+
+
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+DSEG 0000 0080 = 128. bytes (REL,CON)
+
+ Value Global
+ -------- --------------------------------
+ 0008 G$state$0$0
+ 0008 _state
+ 0009 G$row$0$0
+ 0009 _row
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+SSEG 000B 00F5 = 245. bytes (REL,OVR)
+
+ Value Global
+ -------- --------------------------------
+ 000B __start__stack
+
+
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+HOME 0000 0008 = 8. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0000 A$keypad_display$381
+ 0C:0003 A$keypad_display$403
+ 0C:0003 __sdcc_program_startup
+ 0C:0006 A$keypad_display$405
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT0 0008 0003 = 3. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0008 __sdcc_gsinit_startup
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT3 0015 0022 = 34. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0015 __mcs51_genXINIT
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT4 0037 002A = 42. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0037 __mcs51_genRAMCLEAR
+ 0C:003D __mcs51_genXRAMCLEAR
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSFINAL 0061 0003 = 3. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0061 A$keypad_display$396
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CSEG 0064 00B6 = 182. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0064 A$keypad_display$434
+ 0C:0064 C$keypad_display.c$38$0$0
+ 0C:0064 C$keypad_display.c$40$1$1
+ 0C:0064 G$main$0$0
+ 0C:0064 _main
+ 0C:0065 A$keypad_display$435
+ 0C:0067 A$keypad_display$436
+ 0C:0069 A$keypad_display$438
+ 0C:006A A$keypad_display$439
+ 0C:006C A$keypad_display$440
+ 0C:006E A$keypad_display$441
+ 0C:0070 A$keypad_display$442
+ 0C:0072 A$keypad_display$443
+ 0C:0074 A$keypad_display$444
+ 0C:0076 A$keypad_display$447
+ 0C:0076 C$keypad_display.c$42$3$3
+ 0C:0078 A$keypad_display$448
+ 0C:007A A$keypad_display$449
+ 0C:007C A$keypad_display$450
+ 0C:007E A$keypad_display$451
+ 0C:0080 A$keypad_display$452
+ 0C:0082 A$keypad_display$453
+ 0C:0083 A$keypad_display$454
+ 0C:0084 A$keypad_display$455
+ 0C:0086 A$keypad_display$459
+ 0C:0086 C$keypad_display.c$48$3$3
+ 0C:0089 A$keypad_display$463
+ 0C:0089 C$keypad_display.c$53$3$3
+ 0C:008C A$keypad_display$466
+ 0C:008C C$keypad_display.c$54$3$3
+ 0C:008F A$keypad_display$469
+ 0C:008F C$keypad_display.c$56$3$3
+ 0C:0091 A$keypad_display$470
+ 0C:0094 A$keypad_display$473
+ 0C:0094 C$keypad_display.c$57$4$4
+ 0C:0097 A$keypad_display$474
+ 0C:0099 A$keypad_display$478
+ 0C:0099 C$keypad_display.c$58$3$3
+ 0C:009B A$keypad_display$479
+ 0C:009E A$keypad_display$482
+ 0C:009E C$keypad_display.c$59$4$5
+ 0C:00A1 A$keypad_display$483
+ 0C:00A3 A$keypad_display$487
+ 0C:00A3 C$keypad_display.c$60$3$3
+ 0C:00A5 A$keypad_display$488
+ 0C:00A8 A$keypad_display$491
+ 0C:00A8 C$keypad_display.c$61$4$6
+ 0C:00AB A$keypad_display$492
+ 0C:00AD A$keypad_display$496
+ 0C:00AD C$keypad_display.c$62$3$3
+ 0C:00AF A$keypad_display$497
+ 0C:00B2 A$keypad_display$498
+ 0C:00B5 A$keypad_display$502
+ 0C:00B5 C$keypad_display.c$63$4$7
+ 0C:00B8 A$keypad_display$508
+ 0C:00B8 C$keypad_display.c$65$3$3
+ 0C:00B8 C$keypad_display.c$68$3$3
+ 0C:00B9 A$keypad_display$509
+ 0C:00BC A$keypad_display$510
+ 0C:00BD A$keypad_display$511
+ 0C:00C0 A$keypad_display$512
+ 0C:00C2 A$keypad_display$514
+ 0C:00C4 A$keypad_display$515
+ 0C:00C7 A$keypad_display$516
+ 0C:00C8 A$keypad_display$517
+ 0C:00CB A$keypad_display$518
+ 0C:00CD A$keypad_display$520
+ 0C:00CF A$keypad_display$521
+ 0C:00D2 A$keypad_display$522
+ 0C:00D3 A$keypad_display$523
+ 0C:00D6 A$keypad_display$524
+ 0C:00D8 A$keypad_display$526
+ 0C:00DA A$keypad_display$527
+ 0C:00DD A$keypad_display$528
+ 0C:00DE A$keypad_display$529
+ 0C:00E1 A$keypad_display$530
+ 0C:00E3 A$keypad_display$534
+ 0C:00E3 C$keypad_display.c$69$4$9
+ 0C:00E5 A$keypad_display$538
+ 0C:00E5 C$keypad_display.c$70$4$9
+ 0C:00E7 A$keypad_display$539
+ 0C:00EA A$keypad_display$540
+ 0C:00EB A$keypad_display$541
+ 0C:00ED A$keypad_display$546
+ 0C:00ED C$keypad_display.c$71$4$9
+ 0C:00ED C$keypad_display.c$72$4$9
+ 0C:00EF A$keypad_display$550
+ 0C:00EF C$keypad_display.c$73$4$9
+ 0C:00F1 A$keypad_display$551
+ 0C:00F4 A$keypad_display$552
+ 0C:00F5 A$keypad_display$553
+ 0C:00F7 A$keypad_display$558
+ 0C:00F7 C$keypad_display.c$74$4$9
+ 0C:00F7 C$keypad_display.c$75$4$9
+ 0C:00F9 A$keypad_display$562
+ 0C:00F9 C$keypad_display.c$76$4$9
+ 0C:00FB A$keypad_display$563
+ 0C:00FE A$keypad_display$564
+ 0C:00FF A$keypad_display$565
+ 0C:0101 A$keypad_display$570
+ 0C:0101 C$keypad_display.c$77$4$9
+ 0C:0101 C$keypad_display.c$78$4$9
+ 0C:0103 A$keypad_display$574
+ 0C:0103 C$keypad_display.c$79$4$9
+ 0C:0105 A$keypad_display$575
+ 0C:0108 A$keypad_display$576
+ 0C:0109 A$keypad_display$577
+ 0C:010B A$keypad_display$583
+ 0C:010B C$keypad_display.c$41$2$2
+ 0C:010B C$keypad_display.c$81$2$2
+ 0C:010D A$keypad_display$584
+ 0C:010E A$keypad_display$585
+ 0C:0111 A$keypad_display$586
+ 0C:0113 A$keypad_display$590
+ 0C:0113 C$keypad_display.c$84$1$1
+ 0C:0113 XG$main$0$0
+ 0C:0116 __sdcc_external_startup
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CONST 011A 0014 = 20. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:011A Fkeypad_display$keypad$0$0
+ 0C:011E Fkeypad_display$display_0$0$0
+ 0C:0122 Fkeypad_display$display_1$0$0
+ 0C:0126 Fkeypad_display$display_2$0$0
+ 0C:012A Fkeypad_display$display_3$0$0
+
+ ASxxxx Linker V01.75 + NoICE + SDCC Feb 1999, page 1.
+
+Files Linked [ module(s) ]
+
+keypad_display.rel
+
+Libraries Linked [ object file ]
+
+/usr/share/sdcc/lib/small/mcs51.lib [ crtclear.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtxinit.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtxclear.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtpagesfr.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtstart.rel ]
+/usr/share/sdcc/lib/small/libsdcc.lib [ _startup.rel ]
+
+ ASxxxx Linker V01.75 + NoICE + SDCC Feb 1999, page 2.
+
+User Base Address Definitions
+
+HOME = 0x0000
+ISEG = 0x0000
+BSEG = 0x0000
+
+ \ No newline at end of file
diff --git a/demo/keypad_display.mem b/demo/keypad_display.mem
new file mode 100644
index 0000000..a205eff
--- /dev/null
+++ b/demo/keypad_display.mem
@@ -0,0 +1,28 @@
+Internal RAM layout:
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+0x00:|0|0|0|0|0|0|0|0|a|a|a|S|S|S|S|S|
+0x10:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x20:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x30:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x40:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x80:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x90:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xa0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xb0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xc0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xd0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xe0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xf0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
+
+Stack starts at: 0x0b (sp set to 0x0a) with 245 bytes available.
+
+Other memory:
+ Name Start End Size Max
+ ---------------- -------- -------- -------- --------
+ PAGED EXT. RAM 0 0
+ EXTERNAL RAM 0 0
+ ROM/EPROM/FLASH 0x0000 0x012d 302 2048
diff --git a/demo/keypad_display.rel b/demo/keypad_display.rel
new file mode 100644
index 0000000..c4d3129
--- /dev/null
+++ b/demo/keypad_display.rel
@@ -0,0 +1,490 @@
+;!FILE keypad_display.asm
+XH
+H 1A areas 147 global symbols
+M keypad_display
+O -mmcs51 --model-small
+S G$EX0$0$0 Def00A8
+S G$IT0$0$0 Def0088
+S G$TH1$0$0 Def008D
+S _P1 Def0090
+S G$RXD$0$0 Def00B0
+S G$EX1$0$0 Def00AA
+S G$TB8$0$0 Def009B
+S G$IT1$0$0 Def008A
+S G$IE$0$0 Def00A8
+S _P2 Def00A0
+S _B Def00F0
+S _SP Def0081
+S _P3 Def00B0
+S _PS Def00BC
+S G$TXD$0$0 Def00B1
+S G$SM0$0$0 Def009F
+S G$TL0$0$0 Def008A
+S _T0 Def00B4
+S G$SM1$0$0 Def009E
+S G$TL1$0$0 Def008B
+S _T1 Def00B5
+S _OV Def00D2
+S G$SM2$0$0 Def009D
+S _ACC Def00E0
+S __mcs51_genRAMCLEAR Ref0000
+S G$PT0$0$0 Def00B9
+S G$RS0$0$0 Def00D3
+S G$PT1$0$0 Def00BB
+S _WR Def00B6
+S G$F0$0$0 Def00D5
+S G$RS1$0$0 Def00D4
+S G$RD$0$0 Def00B7
+S G$TR0$0$0 Def008C
+S G$F1$0$0 Def00D1
+S G$TR1$0$0 Def008E
+S G$PX0$0$0 Def00B8
+S G$ES$0$0 Def00AC
+S G$PX1$0$0 Def00BA
+S G$IP$0$0 Def00B8
+S G$PSW$0$0 Def00D0
+S G$RI$0$0 Def0098
+S _P0_0 Def0080
+S G$CY$0$0 Def00D7
+S _PCON Def0087
+S _SBUF Def0099
+S _P0_1 Def0081
+S _P1_0 Def0090
+S _P Def00D0
+S G$TI$0$0 Def0099
+S _P0_2 Def0082
+S _P1_1 Def0091
+S _P2_0 Def00A0
+S _P0_3 Def0083
+S _P1_2 Def0092
+S _P2_1 Def00A1
+S _P3_0 Def00B0
+S _SCON Def0098
+S _P0_4 Def0084
+S _P1_3 Def0093
+S _P2_2 Def00A2
+S _P3_1 Def00B1
+S G$P0$0$0 Def0080
+S _TCON Def0088
+S _TMOD Def0089
+S _P0_5 Def0085
+S _P1_4 Def0094
+S _P2_3 Def00A3
+S _P3_2 Def00B2
+S G$P1$0$0 Def0090
+S _P0_6 Def0086
+S _P1_5 Def0095
+S _P2_4 Def00A4
+S _P3_3 Def00B3
+S G$B$0$0 Def00F0
+S G$P2$0$0 Def00A0
+S _P0_7 Def0087
+S _P1_6 Def0096
+S _P2_5 Def00A5
+S _P3_4 Def00B4
+S G$PS$0$0 Def00BC
+S G$P3$0$0 Def00B0
+S G$SP$0$0 Def0081
+S _P1_7 Def0097
+S _P2_6 Def00A6
+S _P3_5 Def00B5
+S G$T0$0$0 Def00B4
+S _P2_7 Def00A7
+S _P3_6 Def00B6
+S G$OV$0$0 Def00D2
+S G$T1$0$0 Def00B5
+S _P3_7 Def00B7
+S G$ACC$0$0 Def00E0
+S _INT0 Def00B2
+S _DPH Def0083
+S _INT1 Def00B3
+S G$WR$0$0 Def00B6
+S _IE0 Def0089
+S _IE1 Def008B
+S _DPL Def0082
+S G$P0_0$0$0 Def0080
+S G$P$0$0 Def00D0
+S G$P1_0$0$0 Def0090
+S G$P0_1$0$0 Def0081
+S G$SBUF$0$0 Def0099
+S G$PCON$0$0 Def0087
+S _AC Def00D6
+S G$P2_0$0$0 Def00A0
+S G$P1_1$0$0 Def0091
+S G$P0_2$0$0 Def0082
+S _REN Def009C
+S G$P3_0$0$0 Def00B0
+S G$P2_1$0$0 Def00A1
+S G$P1_2$0$0 Def0092
+S G$P0_3$0$0 Def0083
+S _EA Def00AF
+S G$P3_1$0$0 Def00B1
+S G$P2_2$0$0 Def00A2
+S G$P1_3$0$0 Def0093
+S G$P0_4$0$0 Def0084
+S G$SCON$0$0 Def0098
+S G$P3_2$0$0 Def00B2
+S G$P2_3$0$0 Def00A3
+S G$P1_4$0$0 Def0094
+S G$P0_5$0$0 Def0085
+S G$TMOD$0$0 Def0089
+S G$TCON$0$0 Def0088
+S G$P3_3$0$0 Def00B3
+S G$P2_4$0$0 Def00A4
+S G$P1_5$0$0 Def0095
+S G$P0_6$0$0 Def0086
+S _ET0 Def00A9
+S G$P3_4$0$0 Def00B4
+S G$P2_5$0$0 Def00A5
+S G$P1_6$0$0 Def0096
+S G$P0_7$0$0 Def0087
+S _TF0 Def008D
+S _ET1 Def00AB
+S G$P3_5$0$0 Def00B5
+S G$P2_6$0$0 Def00A6
+S G$P1_7$0$0 Def0097
+S _TF1 Def008F
+S G$P3_6$0$0 Def00B6
+S G$P2_7$0$0 Def00A7
+S _TH0 Def008C
+S _RB8 Def009A
+S __mcs51_genXINIT Ref0000
+S G$P3_7$0$0 Def00B7
+S _TH1 Def008D
+S _IT0 Def0088
+S _EX0 Def00A8
+S _IE Def00A8
+S _IT1 Def008A
+S _TB8 Def009B
+S _EX1 Def00AA
+S _RXD Def00B0
+S G$INT0$0$0 Def00B2
+S G$INT1$0$0 Def00B3
+S G$DPH$0$0 Def0083
+S _TL0 Def008A
+S _SM0 Def009F
+S _TXD Def00B1
+S _TL1 Def008B
+S _SM1 Def009E
+S G$IE0$0$0 Def0089
+S _SM2 Def009D
+S G$IE1$0$0 Def008B
+S G$DPL$0$0 Def0082
+S _PT0 Def00B9
+S _PT1 Def00BB
+S _RS0 Def00D3
+S _TR0 Def008C
+S _RD Def00B7
+S _RS1 Def00D4
+S _F0 Def00D5
+S _TR1 Def008E
+S _F1 Def00D1
+S G$AC$0$0 Def00D6
+S _ES Def00AC
+S _PX0 Def00B8
+S G$REN$0$0 Def009C
+S _IP Def00B8
+S _PX1 Def00BA
+S G$EA$0$0 Def00AF
+S _PSW Def00D0
+S __sdcc_gsinit_startup Ref0000
+S _RI Def0098
+S _CY Def00D7
+S G$ET0$0$0 Def00A9
+S _TI Def0099
+S G$ET1$0$0 Def00AB
+S G$TF0$0$0 Def008D
+S G$TF1$0$0 Def008F
+S __mcs51_genXRAMCLEAR Ref0000
+S G$RB8$0$0 Def009A
+S G$TH0$0$0 Def008C
+S _P0 Def0080
+A _CODE size 0 flags 0 addr 0
+A RSEG size 0 flags 0 addr 0
+A REG_BANK_0 size 8 flags 4 addr 0
+A DSEG size 3 flags 0 addr 0
+S _state Def0000
+S G$row$0$0 Def0001
+S G$state$0$0 Def0000
+S _row Def0001
+A OSEG size 0 flags 4 addr 0
+A SSEG size 1 flags 0 addr 0
+S __start__stack Def0000
+A ISEG size 0 flags 0 addr 0
+A IABS size 0 flags 8 addr 0
+A BSEG size 0 flags 80 addr 0
+A PSEG size 0 flags 50 addr 0
+A XSEG size 0 flags 40 addr 0
+A XABS size 0 flags 48 addr 0
+A XISEG size 0 flags 40 addr 0
+A HOME size 8 flags 20 addr 0
+S A$keypad_display$403 Def0003
+S A$keypad_display$405 Def0006
+S A$keypad_display$381 Def0000
+S __sdcc_program_startup Def0003
+A GSINIT0 size 0 flags 20 addr 0
+A GSINIT1 size 0 flags 20 addr 0
+A GSINIT2 size 0 flags 20 addr 0
+A GSINIT3 size 0 flags 20 addr 0
+A GSINIT4 size 0 flags 20 addr 0
+A GSINIT5 size 0 flags 20 addr 0
+A GSINIT size 0 flags 20 addr 0
+A GSFINAL size 3 flags 20 addr 0
+S A$keypad_display$396 Def0000
+A CSEG size B2 flags 20 addr 0
+S _main Def0000
+S XG$main$0$0 Def00AF
+S A$keypad_display$510 Def0058
+S A$keypad_display$520 Def0069
+S A$keypad_display$511 Def0059
+S A$keypad_display$502 Def0051
+S A$keypad_display$530 Def007D
+S A$keypad_display$521 Def006B
+S A$keypad_display$512 Def005C
+S A$keypad_display$440 Def0008
+S A$keypad_display$540 Def0086
+S A$keypad_display$522 Def006E
+S A$keypad_display$450 Def0018
+S A$keypad_display$441 Def000A
+S A$keypad_display$550 Def008B
+S A$keypad_display$541 Def0087
+S A$keypad_display$523 Def006F
+S A$keypad_display$514 Def005E
+S A$keypad_display$451 Def001A
+S A$keypad_display$442 Def000C
+S A$keypad_display$551 Def008D
+S A$keypad_display$524 Def0072
+S A$keypad_display$515 Def0060
+S A$keypad_display$470 Def002D
+S A$keypad_display$452 Def001C
+S A$keypad_display$443 Def000E
+S A$keypad_display$434 Def0000
+S A$keypad_display$570 Def009D
+S A$keypad_display$552 Def0090
+S A$keypad_display$534 Def007F
+S A$keypad_display$516 Def0063
+S A$keypad_display$453 Def001E
+S A$keypad_display$444 Def0010
+S A$keypad_display$435 Def0001
+S G$main$0$0 Def0000
+S A$keypad_display$562 Def0095
+S A$keypad_display$553 Def0091
+S A$keypad_display$526 Def0074
+S A$keypad_display$517 Def0064
+S A$keypad_display$508 Def0054
+S A$keypad_display$463 Def0025
+S A$keypad_display$454 Def001F
+S A$keypad_display$436 Def0003
+S A$keypad_display$590 Def00AF
+S A$keypad_display$563 Def0097
+S A$keypad_display$527 Def0076
+S A$keypad_display$518 Def0067
+S A$keypad_display$509 Def0055
+S A$keypad_display$491 Def0044
+S A$keypad_display$482 Def003A
+S A$keypad_display$473 Def0030
+S A$keypad_display$455 Def0020
+S A$keypad_display$564 Def009A
+S A$keypad_display$546 Def0089
+S A$keypad_display$528 Def0079
+S A$keypad_display$492 Def0047
+S A$keypad_display$483 Def003D
+S A$keypad_display$474 Def0033
+S A$keypad_display$447 Def0012
+S A$keypad_display$438 Def0005
+S A$keypad_display$583 Def00A7
+S A$keypad_display$574 Def009F
+S A$keypad_display$565 Def009B
+S A$keypad_display$538 Def0081
+S A$keypad_display$529 Def007A
+S A$keypad_display$466 Def0028
+S A$keypad_display$448 Def0014
+S A$keypad_display$439 Def0006
+S A$keypad_display$584 Def00A9
+S A$keypad_display$575 Def00A1
+S A$keypad_display$539 Def0083
+S A$keypad_display$449 Def0016
+S C$keypad_display.c$40$1$1 Def0000
+S A$keypad_display$585 Def00AA
+S A$keypad_display$576 Def00A4
+S A$keypad_display$558 Def0093
+S A$keypad_display$459 Def0022
+S A$keypad_display$586 Def00AD
+S A$keypad_display$577 Def00A5
+S A$keypad_display$496 Def0049
+S A$keypad_display$487 Def003F
+S A$keypad_display$478 Def0035
+S A$keypad_display$469 Def002B
+S A$keypad_display$497 Def004B
+S A$keypad_display$488 Def0041
+S A$keypad_display$479 Def0037
+S C$keypad_display.c$41$2$2 Def00A7
+S A$keypad_display$498 Def004E
+S C$keypad_display.c$38$0$0 Def0000
+S C$keypad_display.c$60$3$3 Def003F
+S C$keypad_display.c$42$3$3 Def0012
+S C$keypad_display.c$81$2$2 Def00A7
+S C$keypad_display.c$84$1$1 Def00AF
+S C$keypad_display.c$62$3$3 Def0049
+S C$keypad_display.c$53$3$3 Def0025
+S C$keypad_display.c$54$3$3 Def0028
+S C$keypad_display.c$65$3$3 Def0054
+S C$keypad_display.c$61$4$6 Def0044
+S C$keypad_display.c$56$3$3 Def002B
+S C$keypad_display.c$48$3$3 Def0022
+S C$keypad_display.c$58$3$3 Def0035
+S C$keypad_display.c$70$4$9 Def0081
+S C$keypad_display.c$68$3$3 Def0054
+S C$keypad_display.c$63$4$7 Def0051
+S C$keypad_display.c$57$4$4 Def0030
+S C$keypad_display.c$71$4$9 Def0089
+S C$keypad_display.c$72$4$9 Def0089
+S C$keypad_display.c$73$4$9 Def008B
+S C$keypad_display.c$59$4$5 Def003A
+S C$keypad_display.c$74$4$9 Def0093
+S C$keypad_display.c$75$4$9 Def0093
+S C$keypad_display.c$76$4$9 Def0095
+S C$keypad_display.c$77$4$9 Def009D
+S C$keypad_display.c$78$4$9 Def009D
+S C$keypad_display.c$69$4$9 Def007F
+S C$keypad_display.c$79$4$9 Def009F
+A CONST size 14 flags 20 addr 0
+S Fkeypad_display$keypad$0$0 Def0000
+S Fkeypad_display$display_0$0$0 Def0004
+S Fkeypad_display$display_1$0$0 Def0008
+S Fkeypad_display$display_2$0$0 Def000C
+S Fkeypad_display$display_3$0$0 Def0010
+A XINIT size 0 flags 20 addr 0
+A CABS size 0 flags 28 addr 0
+T 00 00
+R 00 00 00 02
+T 00 00
+R 00 00 00 03
+T 00 00
+R 00 00 00 03
+T 00 01
+R 00 00 00 03
+T 00 01
+R 00 00 00 03
+T 00 00
+R 00 00 00 05
+T 00 00
+R 00 00 00 05
+T 00 00
+R 00 00 00 0D
+T 00 00 02 00 00
+R 00 00 00 0D 02 03 00 B8
+T 00 00 02 00 03
+R 00 00 00 15 00 03 00 0D
+T 00 03
+R 00 00 00 0D
+T 00 03 12 00 00 80 FE
+R 00 00 00 0D 00 03 00 16
+T 00 00
+R 00 00 00 16
+T 00 00
+R 00 00 00 16
+T 00 00 E4 F5 00 00 01 F5 00 00 02
+R 00 00 00 16 F1 21 04 00 03 F1 21 08 00 03
+T 00 05
+R 00 00 00 16
+T 00 05 C3 E5 00 00 01 94 04 E5 00 00 02 64 80 94
+R 00 00 00 16 F1 21 04 00 03 F1 21 0A 00 03
+T 00 0F 80 50 EE E5 00 00 01 24 00 00 00 F5 82 E5
+R 00 00 00 16 F1 21 06 00 03 F1 01 0A 00 17
+T 00 19 00 00 02 34 00 00 00 F5 83 E4 93 F5 90 85
+R 00 00 00 16 F1 21 02 00 03 F1 81 06 00 17
+T 00 23 90 00 00 00 53 00 00 00 0F 63
+R 00 00 00 16 F1 21 03 00 03 F1 01 07 00 03
+T 00 29 00 00 00 0F E5 00 00 00 30 E0 05 75
+R 00 00 00 16 F1 01 02 00 03 F1 21 07 00 03
+T 00 31 00 00 00 00 80 1F
+R 00 00 00 16 F1 21 02 00 03
+T 00 35
+R 00 00 00 16
+T 00 35 E5 00 00 00 30 E1 05 75 00 00 00 01 80 15
+R 00 00 00 16 F1 21 03 00 03 F1 21 0A 00 03
+T 00 3F
+R 00 00 00 16
+T 00 3F E5 00 00 00 30 E2 05 75 00 00 00 02 80 0B
+R 00 00 00 16 F1 21 03 00 03 F1 21 0A 00 03
+T 00 49
+R 00 00 00 16
+T 00 49 E5 00 00 00 20 E3 03 02 00 A7
+R 00 00 00 16 F1 21 03 00 03 00 0A 00 16
+T 00 51
+R 00 00 00 16
+T 00 51 75 00 00 00 03
+R 00 00 00 16 F1 21 03 00 03
+T 00 54
+R 00 00 00 16
+T 00 54 E4 B5 00 00 01 06 E4 B5 00 00 02 02 80 23
+R 00 00 00 16 F1 21 04 00 03 F1 21 0A 00 03
+T 00 5E
+R 00 00 00 16
+T 00 5E 74 01 B5 00 00 01 06 E4 B5 00 00 02 02 80
+R 00 00 00 16 F1 21 05 00 03 F1 21 0B 00 03
+T 00 68 22
+R 00 00 00 16
+T 00 69
+R 00 00 00 16
+T 00 69 74 02 B5 00 00 01 06 E4 B5 00 00 02 02 80
+R 00 00 00 16 F1 21 05 00 03 F1 21 0B 00 03
+T 00 73 21
+R 00 00 00 16
+T 00 74
+R 00 00 00 16
+T 00 74 74 03 B5 00 00 01 06 E4 B5 00 00 02 02 80
+R 00 00 00 16 F1 21 05 00 03 F1 21 0B 00 03
+T 00 7E 20
+R 00 00 00 16
+T 00 7F
+R 00 00 00 16
+T 00 7F 80 26
+R 00 00 00 16
+T 00 81
+R 00 00 00 16
+T 00 81 E5 00 00 00 90 00 04 93 F5 B0 80 1C
+R 00 00 00 16 F1 21 03 00 03 00 07 00 17
+T 00 8B
+R 00 00 00 16
+T 00 8B E5 00 00 00 90 00 08 93 F5 B0 80 12
+R 00 00 00 16 F1 21 03 00 03 00 07 00 17
+T 00 95
+R 00 00 00 16
+T 00 95 E5 00 00 00 90 00 0C 93 F5 B0 80 08
+R 00 00 00 16 F1 21 03 00 03 00 07 00 17
+T 00 9F
+R 00 00 00 16
+T 00 9F E5 00 00 00 90 00 10 93 F5 B0
+R 00 00 00 16 F1 21 03 00 03 00 07 00 17
+T 00 A7
+R 00 00 00 16
+T 00 A7 05 00 00 01 E4 B5 00 00 01 02 05
+R 00 00 00 16 F1 21 03 00 03 F1 21 08 00 03
+T 00 AE 00 00 02
+R 00 00 00 16 F1 21 02 00 03
+T 00 AF
+R 00 00 00 16
+T 00 AF 02 00 05
+R 00 00 00 16 00 03 00 16
+T 00 00
+R 00 00 00 17
+T 00 00 EF DF BF 7F
+R 00 00 00 17
+T 00 04
+R 00 00 00 17
+T 00 04 F9 64 70 48
+R 00 00 00 17
+T 00 08
+R 00 00 00 17
+T 00 08 59 52 42 40
+R 00 00 00 17
+T 00 0C
+R 00 00 00 17
+T 00 0C F8 40 50 C6
+R 00 00 00 17
+T 00 10
+R 00 00 00 17
+T 00 10 79 C0 49 C0
+R 00 00 00 17
diff --git a/demo/keypad_display.rst b/demo/keypad_display.rst
new file mode 100644
index 0000000..e013b8e
--- /dev/null
+++ b/demo/keypad_display.rst
@@ -0,0 +1,624 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+ 4 ; This file was generated Tue Oct 27 23:03:55 2009
+ 5 ;--------------------------------------------------------
+ 6 .module keypad_display
+ 7 .optsdcc -mmcs51 --model-small
+ 8
+ 9 ;--------------------------------------------------------
+ 10 ; Public variables in this module
+ 11 ;--------------------------------------------------------
+ 12 .globl _main
+ 13 .globl _CY
+ 14 .globl _AC
+ 15 .globl _F0
+ 16 .globl _RS1
+ 17 .globl _RS0
+ 18 .globl _OV
+ 19 .globl _F1
+ 20 .globl _P
+ 21 .globl _PS
+ 22 .globl _PT1
+ 23 .globl _PX1
+ 24 .globl _PT0
+ 25 .globl _PX0
+ 26 .globl _RD
+ 27 .globl _WR
+ 28 .globl _T1
+ 29 .globl _T0
+ 30 .globl _INT1
+ 31 .globl _INT0
+ 32 .globl _TXD
+ 33 .globl _RXD
+ 34 .globl _P3_7
+ 35 .globl _P3_6
+ 36 .globl _P3_5
+ 37 .globl _P3_4
+ 38 .globl _P3_3
+ 39 .globl _P3_2
+ 40 .globl _P3_1
+ 41 .globl _P3_0
+ 42 .globl _EA
+ 43 .globl _ES
+ 44 .globl _ET1
+ 45 .globl _EX1
+ 46 .globl _ET0
+ 47 .globl _EX0
+ 48 .globl _P2_7
+ 49 .globl _P2_6
+ 50 .globl _P2_5
+ 51 .globl _P2_4
+ 52 .globl _P2_3
+ 53 .globl _P2_2
+ 54 .globl _P2_1
+ 55 .globl _P2_0
+ 56 .globl _SM0
+ 57 .globl _SM1
+ 58 .globl _SM2
+ 59 .globl _REN
+ 60 .globl _TB8
+ 61 .globl _RB8
+ 62 .globl _TI
+ 63 .globl _RI
+ 64 .globl _P1_7
+ 65 .globl _P1_6
+ 66 .globl _P1_5
+ 67 .globl _P1_4
+ 68 .globl _P1_3
+ 69 .globl _P1_2
+ 70 .globl _P1_1
+ 71 .globl _P1_0
+ 72 .globl _TF1
+ 73 .globl _TR1
+ 74 .globl _TF0
+ 75 .globl _TR0
+ 76 .globl _IE1
+ 77 .globl _IT1
+ 78 .globl _IE0
+ 79 .globl _IT0
+ 80 .globl _P0_7
+ 81 .globl _P0_6
+ 82 .globl _P0_5
+ 83 .globl _P0_4
+ 84 .globl _P0_3
+ 85 .globl _P0_2
+ 86 .globl _P0_1
+ 87 .globl _P0_0
+ 88 .globl _B
+ 89 .globl _ACC
+ 90 .globl _PSW
+ 91 .globl _IP
+ 92 .globl _P3
+ 93 .globl _IE
+ 94 .globl _P2
+ 95 .globl _SBUF
+ 96 .globl _SCON
+ 97 .globl _P1
+ 98 .globl _TH1
+ 99 .globl _TH0
+ 100 .globl _TL1
+ 101 .globl _TL0
+ 102 .globl _TMOD
+ 103 .globl _TCON
+ 104 .globl _PCON
+ 105 .globl _DPH
+ 106 .globl _DPL
+ 107 .globl _SP
+ 108 .globl _P0
+ 109 .globl _row
+ 110 .globl _state
+ 111 ;--------------------------------------------------------
+ 112 ; special function registers
+ 113 ;--------------------------------------------------------
+ 114 .area RSEG (DATA)
+ 0080 115 G$P0$0$0 == 0x0080
+ 0080 116 _P0 = 0x0080
+ 0081 117 G$SP$0$0 == 0x0081
+ 0081 118 _SP = 0x0081
+ 0082 119 G$DPL$0$0 == 0x0082
+ 0082 120 _DPL = 0x0082
+ 0083 121 G$DPH$0$0 == 0x0083
+ 0083 122 _DPH = 0x0083
+ 0087 123 G$PCON$0$0 == 0x0087
+ 0087 124 _PCON = 0x0087
+ 0088 125 G$TCON$0$0 == 0x0088
+ 0088 126 _TCON = 0x0088
+ 0089 127 G$TMOD$0$0 == 0x0089
+ 0089 128 _TMOD = 0x0089
+ 008A 129 G$TL0$0$0 == 0x008a
+ 008A 130 _TL0 = 0x008a
+ 008B 131 G$TL1$0$0 == 0x008b
+ 008B 132 _TL1 = 0x008b
+ 008C 133 G$TH0$0$0 == 0x008c
+ 008C 134 _TH0 = 0x008c
+ 008D 135 G$TH1$0$0 == 0x008d
+ 008D 136 _TH1 = 0x008d
+ 0090 137 G$P1$0$0 == 0x0090
+ 0090 138 _P1 = 0x0090
+ 0098 139 G$SCON$0$0 == 0x0098
+ 0098 140 _SCON = 0x0098
+ 0099 141 G$SBUF$0$0 == 0x0099
+ 0099 142 _SBUF = 0x0099
+ 00A0 143 G$P2$0$0 == 0x00a0
+ 00A0 144 _P2 = 0x00a0
+ 00A8 145 G$IE$0$0 == 0x00a8
+ 00A8 146 _IE = 0x00a8
+ 00B0 147 G$P3$0$0 == 0x00b0
+ 00B0 148 _P3 = 0x00b0
+ 00B8 149 G$IP$0$0 == 0x00b8
+ 00B8 150 _IP = 0x00b8
+ 00D0 151 G$PSW$0$0 == 0x00d0
+ 00D0 152 _PSW = 0x00d0
+ 00E0 153 G$ACC$0$0 == 0x00e0
+ 00E0 154 _ACC = 0x00e0
+ 00F0 155 G$B$0$0 == 0x00f0
+ 00F0 156 _B = 0x00f0
+ 157 ;--------------------------------------------------------
+ 158 ; special function bits
+ 159 ;--------------------------------------------------------
+ 160 .area RSEG (DATA)
+ 0080 161 G$P0_0$0$0 == 0x0080
+ 0080 162 _P0_0 = 0x0080
+ 0081 163 G$P0_1$0$0 == 0x0081
+ 0081 164 _P0_1 = 0x0081
+ 0082 165 G$P0_2$0$0 == 0x0082
+ 0082 166 _P0_2 = 0x0082
+ 0083 167 G$P0_3$0$0 == 0x0083
+ 0083 168 _P0_3 = 0x0083
+ 0084 169 G$P0_4$0$0 == 0x0084
+ 0084 170 _P0_4 = 0x0084
+ 0085 171 G$P0_5$0$0 == 0x0085
+ 0085 172 _P0_5 = 0x0085
+ 0086 173 G$P0_6$0$0 == 0x0086
+ 0086 174 _P0_6 = 0x0086
+ 0087 175 G$P0_7$0$0 == 0x0087
+ 0087 176 _P0_7 = 0x0087
+ 0088 177 G$IT0$0$0 == 0x0088
+ 0088 178 _IT0 = 0x0088
+ 0089 179 G$IE0$0$0 == 0x0089
+ 0089 180 _IE0 = 0x0089
+ 008A 181 G$IT1$0$0 == 0x008a
+ 008A 182 _IT1 = 0x008a
+ 008B 183 G$IE1$0$0 == 0x008b
+ 008B 184 _IE1 = 0x008b
+ 008C 185 G$TR0$0$0 == 0x008c
+ 008C 186 _TR0 = 0x008c
+ 008D 187 G$TF0$0$0 == 0x008d
+ 008D 188 _TF0 = 0x008d
+ 008E 189 G$TR1$0$0 == 0x008e
+ 008E 190 _TR1 = 0x008e
+ 008F 191 G$TF1$0$0 == 0x008f
+ 008F 192 _TF1 = 0x008f
+ 0090 193 G$P1_0$0$0 == 0x0090
+ 0090 194 _P1_0 = 0x0090
+ 0091 195 G$P1_1$0$0 == 0x0091
+ 0091 196 _P1_1 = 0x0091
+ 0092 197 G$P1_2$0$0 == 0x0092
+ 0092 198 _P1_2 = 0x0092
+ 0093 199 G$P1_3$0$0 == 0x0093
+ 0093 200 _P1_3 = 0x0093
+ 0094 201 G$P1_4$0$0 == 0x0094
+ 0094 202 _P1_4 = 0x0094
+ 0095 203 G$P1_5$0$0 == 0x0095
+ 0095 204 _P1_5 = 0x0095
+ 0096 205 G$P1_6$0$0 == 0x0096
+ 0096 206 _P1_6 = 0x0096
+ 0097 207 G$P1_7$0$0 == 0x0097
+ 0097 208 _P1_7 = 0x0097
+ 0098 209 G$RI$0$0 == 0x0098
+ 0098 210 _RI = 0x0098
+ 0099 211 G$TI$0$0 == 0x0099
+ 0099 212 _TI = 0x0099
+ 009A 213 G$RB8$0$0 == 0x009a
+ 009A 214 _RB8 = 0x009a
+ 009B 215 G$TB8$0$0 == 0x009b
+ 009B 216 _TB8 = 0x009b
+ 009C 217 G$REN$0$0 == 0x009c
+ 009C 218 _REN = 0x009c
+ 009D 219 G$SM2$0$0 == 0x009d
+ 009D 220 _SM2 = 0x009d
+ 009E 221 G$SM1$0$0 == 0x009e
+ 009E 222 _SM1 = 0x009e
+ 009F 223 G$SM0$0$0 == 0x009f
+ 009F 224 _SM0 = 0x009f
+ 00A0 225 G$P2_0$0$0 == 0x00a0
+ 00A0 226 _P2_0 = 0x00a0
+ 00A1 227 G$P2_1$0$0 == 0x00a1
+ 00A1 228 _P2_1 = 0x00a1
+ 00A2 229 G$P2_2$0$0 == 0x00a2
+ 00A2 230 _P2_2 = 0x00a2
+ 00A3 231 G$P2_3$0$0 == 0x00a3
+ 00A3 232 _P2_3 = 0x00a3
+ 00A4 233 G$P2_4$0$0 == 0x00a4
+ 00A4 234 _P2_4 = 0x00a4
+ 00A5 235 G$P2_5$0$0 == 0x00a5
+ 00A5 236 _P2_5 = 0x00a5
+ 00A6 237 G$P2_6$0$0 == 0x00a6
+ 00A6 238 _P2_6 = 0x00a6
+ 00A7 239 G$P2_7$0$0 == 0x00a7
+ 00A7 240 _P2_7 = 0x00a7
+ 00A8 241 G$EX0$0$0 == 0x00a8
+ 00A8 242 _EX0 = 0x00a8
+ 00A9 243 G$ET0$0$0 == 0x00a9
+ 00A9 244 _ET0 = 0x00a9
+ 00AA 245 G$EX1$0$0 == 0x00aa
+ 00AA 246 _EX1 = 0x00aa
+ 00AB 247 G$ET1$0$0 == 0x00ab
+ 00AB 248 _ET1 = 0x00ab
+ 00AC 249 G$ES$0$0 == 0x00ac
+ 00AC 250 _ES = 0x00ac
+ 00AF 251 G$EA$0$0 == 0x00af
+ 00AF 252 _EA = 0x00af
+ 00B0 253 G$P3_0$0$0 == 0x00b0
+ 00B0 254 _P3_0 = 0x00b0
+ 00B1 255 G$P3_1$0$0 == 0x00b1
+ 00B1 256 _P3_1 = 0x00b1
+ 00B2 257 G$P3_2$0$0 == 0x00b2
+ 00B2 258 _P3_2 = 0x00b2
+ 00B3 259 G$P3_3$0$0 == 0x00b3
+ 00B3 260 _P3_3 = 0x00b3
+ 00B4 261 G$P3_4$0$0 == 0x00b4
+ 00B4 262 _P3_4 = 0x00b4
+ 00B5 263 G$P3_5$0$0 == 0x00b5
+ 00B5 264 _P3_5 = 0x00b5
+ 00B6 265 G$P3_6$0$0 == 0x00b6
+ 00B6 266 _P3_6 = 0x00b6
+ 00B7 267 G$P3_7$0$0 == 0x00b7
+ 00B7 268 _P3_7 = 0x00b7
+ 00B0 269 G$RXD$0$0 == 0x00b0
+ 00B0 270 _RXD = 0x00b0
+ 00B1 271 G$TXD$0$0 == 0x00b1
+ 00B1 272 _TXD = 0x00b1
+ 00B2 273 G$INT0$0$0 == 0x00b2
+ 00B2 274 _INT0 = 0x00b2
+ 00B3 275 G$INT1$0$0 == 0x00b3
+ 00B3 276 _INT1 = 0x00b3
+ 00B4 277 G$T0$0$0 == 0x00b4
+ 00B4 278 _T0 = 0x00b4
+ 00B5 279 G$T1$0$0 == 0x00b5
+ 00B5 280 _T1 = 0x00b5
+ 00B6 281 G$WR$0$0 == 0x00b6
+ 00B6 282 _WR = 0x00b6
+ 00B7 283 G$RD$0$0 == 0x00b7
+ 00B7 284 _RD = 0x00b7
+ 00B8 285 G$PX0$0$0 == 0x00b8
+ 00B8 286 _PX0 = 0x00b8
+ 00B9 287 G$PT0$0$0 == 0x00b9
+ 00B9 288 _PT0 = 0x00b9
+ 00BA 289 G$PX1$0$0 == 0x00ba
+ 00BA 290 _PX1 = 0x00ba
+ 00BB 291 G$PT1$0$0 == 0x00bb
+ 00BB 292 _PT1 = 0x00bb
+ 00BC 293 G$PS$0$0 == 0x00bc
+ 00BC 294 _PS = 0x00bc
+ 00D0 295 G$P$0$0 == 0x00d0
+ 00D0 296 _P = 0x00d0
+ 00D1 297 G$F1$0$0 == 0x00d1
+ 00D1 298 _F1 = 0x00d1
+ 00D2 299 G$OV$0$0 == 0x00d2
+ 00D2 300 _OV = 0x00d2
+ 00D3 301 G$RS0$0$0 == 0x00d3
+ 00D3 302 _RS0 = 0x00d3
+ 00D4 303 G$RS1$0$0 == 0x00d4
+ 00D4 304 _RS1 = 0x00d4
+ 00D5 305 G$F0$0$0 == 0x00d5
+ 00D5 306 _F0 = 0x00d5
+ 00D6 307 G$AC$0$0 == 0x00d6
+ 00D6 308 _AC = 0x00d6
+ 00D7 309 G$CY$0$0 == 0x00d7
+ 00D7 310 _CY = 0x00d7
+ 311 ;--------------------------------------------------------
+ 312 ; overlayable register banks
+ 313 ;--------------------------------------------------------
+ 314 .area REG_BANK_0 (REL,OVR,DATA)
+ 0000 315 .ds 8
+ 316 ;--------------------------------------------------------
+ 317 ; internal ram data
+ 318 ;--------------------------------------------------------
+ 319 .area DSEG (DATA)
+ 0000 320 G$state$0$0==.
+ 0008 321 _state::
+ 0008 322 .ds 1
+ 0001 323 G$row$0$0==.
+ 0009 324 _row::
+ 0009 325 .ds 2
+ 326 ;--------------------------------------------------------
+ 327 ; overlayable items in internal ram
+ 328 ;--------------------------------------------------------
+ 329 .area OSEG (OVR,DATA)
+ 330 ;--------------------------------------------------------
+ 331 ; Stack segment in internal ram
+ 332 ;--------------------------------------------------------
+ 333 .area SSEG (DATA)
+ 000B 334 __start__stack:
+ 000B 335 .ds 1
+ 336
+ 337 ;--------------------------------------------------------
+ 338 ; indirectly addressable internal ram data
+ 339 ;--------------------------------------------------------
+ 340 .area ISEG (DATA)
+ 341 ;--------------------------------------------------------
+ 342 ; absolute internal ram data
+ 343 ;--------------------------------------------------------
+ 344 .area IABS (ABS,DATA)
+ 345 .area IABS (ABS,DATA)
+ 346 ;--------------------------------------------------------
+ 347 ; bit data
+ 348 ;--------------------------------------------------------
+ 349 .area BSEG (BIT)
+ 350 ;--------------------------------------------------------
+ 351 ; paged external ram data
+ 352 ;--------------------------------------------------------
+ 353 .area PSEG (PAG,XDATA)
+ 354 ;--------------------------------------------------------
+ 355 ; external ram data
+ 356 ;--------------------------------------------------------
+ 357 .area XSEG (XDATA)
+ 358 ;--------------------------------------------------------
+ 359 ; absolute external ram data
+ 360 ;--------------------------------------------------------
+ 361 .area XABS (ABS,XDATA)
+ 362 ;--------------------------------------------------------
+ 363 ; external initialized ram data
+ 364 ;--------------------------------------------------------
+ 365 .area XISEG (XDATA)
+ 366 .area HOME (CODE)
+ 367 .area GSINIT0 (CODE)
+ 368 .area GSINIT1 (CODE)
+ 369 .area GSINIT2 (CODE)
+ 370 .area GSINIT3 (CODE)
+ 371 .area GSINIT4 (CODE)
+ 372 .area GSINIT5 (CODE)
+ 373 .area GSINIT (CODE)
+ 374 .area GSFINAL (CODE)
+ 375 .area CSEG (CODE)
+ 376 ;--------------------------------------------------------
+ 377 ; interrupt vector
+ 378 ;--------------------------------------------------------
+ 379 .area HOME (CODE)
+ 0000 380 __interrupt_vect:
+ 0000 02 00 08 381 ljmp __sdcc_gsinit_startup
+ 382 ;--------------------------------------------------------
+ 383 ; global & static initialisations
+ 384 ;--------------------------------------------------------
+ 385 .area HOME (CODE)
+ 386 .area GSINIT (CODE)
+ 387 .area GSFINAL (CODE)
+ 388 .area GSINIT (CODE)
+ 389 .globl __sdcc_gsinit_startup
+ 390 .globl __sdcc_program_startup
+ 391 .globl __start__stack
+ 392 .globl __mcs51_genXINIT
+ 393 .globl __mcs51_genXRAMCLEAR
+ 394 .globl __mcs51_genRAMCLEAR
+ 395 .area GSFINAL (CODE)
+ 0061 02 00 03 396 ljmp __sdcc_program_startup
+ 397 ;--------------------------------------------------------
+ 398 ; Home
+ 399 ;--------------------------------------------------------
+ 400 .area HOME (CODE)
+ 401 .area HOME (CODE)
+ 0003 402 __sdcc_program_startup:
+ 0003 12 00 64 403 lcall _main
+ 404 ; return from main will lock up
+ 0006 80 FE 405 sjmp .
+ 406 ;--------------------------------------------------------
+ 407 ; code
+ 408 ;--------------------------------------------------------
+ 409 .area CSEG (CODE)
+ 410 ;------------------------------------------------------------
+ 411 ;Allocation info for local variables in function 'main'
+ 412 ;------------------------------------------------------------
+ 413 ;------------------------------------------------------------
+ 0000 414 G$main$0$0 ==.
+ 0000 415 C$keypad_display.c$38$0$0 ==.
+ 416 ; keypad_display.c:38: int main()
+ 417 ; -----------------------------------------
+ 418 ; function main
+ 419 ; -----------------------------------------
+ 0064 420 _main:
+ 0002 421 ar2 = 0x02
+ 0003 422 ar3 = 0x03
+ 0004 423 ar4 = 0x04
+ 0005 424 ar5 = 0x05
+ 0006 425 ar6 = 0x06
+ 0007 426 ar7 = 0x07
+ 0000 427 ar0 = 0x00
+ 0001 428 ar1 = 0x01
+ 0000 429 C$keypad_display.c$40$1$1 ==.
+ 430 ; keypad_display.c:40: while(1) {
+ 0064 431 00123$:
+ 0000 432 C$keypad_display.c$41$2$2 ==.
+ 433 ; keypad_display.c:41: for(row=0; row<4; row++) {
+ 0064 E4 434 clr a
+ 0065 F5 09 435 mov _row,a
+ 0067 F5 0A 436 mov (_row + 1),a
+ 0069 437 00118$:
+ 0069 C3 438 clr c
+ 006A E5 09 439 mov a,_row
+ 006C 94 04 440 subb a,#0x04
+ 006E E5 0A 441 mov a,(_row + 1)
+ 0070 64 80 442 xrl a,#0x80
+ 0072 94 80 443 subb a,#0x80
+ 0074 50 EE 444 jnc 00123$
+ 0012 445 C$keypad_display.c$42$3$3 ==.
+ 446 ; keypad_display.c:42: P1=keypad[row];
+ 0076 E5 09 447 mov a,_row
+ 0078 24 1A 448 add a,#_keypad
+ 007A F5 82 449 mov dpl,a
+ 007C E5 0A 450 mov a,(_row + 1)
+ 007E 34 01 451 addc a,#(_keypad >> 8)
+ 0080 F5 83 452 mov dph,a
+ 0082 E4 453 clr a
+ 0083 93 454 movc a,@a+dptr
+ 0084 F5 90 455 mov _P1,a
+ 0022 456 C$keypad_display.c$48$3$3 ==.
+ 457 ; keypad_display.c:48: _endasm;
+ 458
+ 0086 85 90 08 459 mov _state, P1
+ 460
+ 0025 461 C$keypad_display.c$53$3$3 ==.
+ 462 ; keypad_display.c:53: state&=0x0f;
+ 0089 53 08 0F 463 anl _state,#0x0F
+ 0028 464 C$keypad_display.c$54$3$3 ==.
+ 465 ; keypad_display.c:54: state^=0x0f;
+ 008C 63 08 0F 466 xrl _state,#0x0F
+ 002B 467 C$keypad_display.c$56$3$3 ==.
+ 468 ; keypad_display.c:56: if(state & 1) {
+ 008F E5 08 469 mov a,_state
+ 0091 30 E0 05 470 jnb acc.0,00111$
+ 0030 471 C$keypad_display.c$57$4$4 ==.
+ 472 ; keypad_display.c:57: state=0;
+ 0094 75 08 00 473 mov _state,#0x00
+ 0097 80 1F 474 sjmp 00112$
+ 0099 475 00111$:
+ 0035 476 C$keypad_display.c$58$3$3 ==.
+ 477 ; keypad_display.c:58: } else if(state & 2) {
+ 0099 E5 08 478 mov a,_state
+ 009B 30 E1 05 479 jnb acc.1,00108$
+ 003A 480 C$keypad_display.c$59$4$5 ==.
+ 481 ; keypad_display.c:59: state=1;
+ 009E 75 08 01 482 mov _state,#0x01
+ 00A1 80 15 483 sjmp 00112$
+ 00A3 484 00108$:
+ 003F 485 C$keypad_display.c$60$3$3 ==.
+ 486 ; keypad_display.c:60: } else if(state & 4) {
+ 00A3 E5 08 487 mov a,_state
+ 00A5 30 E2 05 488 jnb acc.2,00105$
+ 0044 489 C$keypad_display.c$61$4$6 ==.
+ 490 ; keypad_display.c:61: state=2;
+ 00A8 75 08 02 491 mov _state,#0x02
+ 00AB 80 0B 492 sjmp 00112$
+ 00AD 493 00105$:
+ 0049 494 C$keypad_display.c$62$3$3 ==.
+ 495 ; keypad_display.c:62: } else if(state & 8) {
+ 00AD E5 08 496 mov a,_state
+ 00AF 20 E3 03 497 jb acc.3,00142$
+ 00B2 02 01 0B 498 ljmp 00120$
+ 00B5 499 00142$:
+ 0051 500 C$keypad_display.c$63$4$7 ==.
+ 501 ; keypad_display.c:63: state=3;
+ 00B5 75 08 03 502 mov _state,#0x03
+ 0054 503 C$keypad_display.c$65$3$3 ==.
+ 504 ; keypad_display.c:65: continue;
+ 00B8 505 00112$:
+ 0054 506 C$keypad_display.c$68$3$3 ==.
+ 507 ; keypad_display.c:68: switch(row) {
+ 00B8 E4 508 clr a
+ 00B9 B5 09 06 509 cjne a,_row,00143$
+ 00BC E4 510 clr a
+ 00BD B5 0A 02 511 cjne a,(_row + 1),00143$
+ 00C0 80 23 512 sjmp 00113$
+ 00C2 513 00143$:
+ 00C2 74 01 514 mov a,#0x01
+ 00C4 B5 09 06 515 cjne a,_row,00144$
+ 00C7 E4 516 clr a
+ 00C8 B5 0A 02 517 cjne a,(_row + 1),00144$
+ 00CB 80 22 518 sjmp 00114$
+ 00CD 519 00144$:
+ 00CD 74 02 520 mov a,#0x02
+ 00CF B5 09 06 521 cjne a,_row,00145$
+ 00D2 E4 522 clr a
+ 00D3 B5 0A 02 523 cjne a,(_row + 1),00145$
+ 00D6 80 21 524 sjmp 00115$
+ 00D8 525 00145$:
+ 00D8 74 03 526 mov a,#0x03
+ 00DA B5 09 06 527 cjne a,_row,00146$
+ 00DD E4 528 clr a
+ 00DE B5 0A 02 529 cjne a,(_row + 1),00146$
+ 00E1 80 20 530 sjmp 00116$
+ 00E3 531 00146$:
+ 007F 532 C$keypad_display.c$69$4$9 ==.
+ 533 ; keypad_display.c:69: case 0:
+ 00E3 80 26 534 sjmp 00120$
+ 00E5 535 00113$:
+ 0081 536 C$keypad_display.c$70$4$9 ==.
+ 537 ; keypad_display.c:70: P3=display_0[state];
+ 00E5 E5 08 538 mov a,_state
+ 00E7 90 01 1E 539 mov dptr,#_display_0
+ 00EA 93 540 movc a,@a+dptr
+ 00EB F5 B0 541 mov _P3,a
+ 0089 542 C$keypad_display.c$71$4$9 ==.
+ 543 ; keypad_display.c:71: break;
+ 0089 544 C$keypad_display.c$72$4$9 ==.
+ 545 ; keypad_display.c:72: case 1:
+ 00ED 80 1C 546 sjmp 00120$
+ 00EF 547 00114$:
+ 008B 548 C$keypad_display.c$73$4$9 ==.
+ 549 ; keypad_display.c:73: P3=display_1[state];
+ 00EF E5 08 550 mov a,_state
+ 00F1 90 01 22 551 mov dptr,#_display_1
+ 00F4 93 552 movc a,@a+dptr
+ 00F5 F5 B0 553 mov _P3,a
+ 0093 554 C$keypad_display.c$74$4$9 ==.
+ 555 ; keypad_display.c:74: break;
+ 0093 556 C$keypad_display.c$75$4$9 ==.
+ 557 ; keypad_display.c:75: case 2:
+ 00F7 80 12 558 sjmp 00120$
+ 00F9 559 00115$:
+ 0095 560 C$keypad_display.c$76$4$9 ==.
+ 561 ; keypad_display.c:76: P3=display_2[state];
+ 00F9 E5 08 562 mov a,_state
+ 00FB 90 01 26 563 mov dptr,#_display_2
+ 00FE 93 564 movc a,@a+dptr
+ 00FF F5 B0 565 mov _P3,a
+ 009D 566 C$keypad_display.c$77$4$9 ==.
+ 567 ; keypad_display.c:77: break;
+ 009D 568 C$keypad_display.c$78$4$9 ==.
+ 569 ; keypad_display.c:78: case 3:
+ 0101 80 08 570 sjmp 00120$
+ 0103 571 00116$:
+ 009F 572 C$keypad_display.c$79$4$9 ==.
+ 573 ; keypad_display.c:79: P3=display_3[state];
+ 0103 E5 08 574 mov a,_state
+ 0105 90 01 2A 575 mov dptr,#_display_3
+ 0108 93 576 movc a,@a+dptr
+ 0109 F5 B0 577 mov _P3,a
+ 00A7 578 C$keypad_display.c$81$2$2 ==.
+ 579 ; keypad_display.c:81: }
+ 010B 580 00120$:
+ 00A7 581 C$keypad_display.c$41$2$2 ==.
+ 582 ; keypad_display.c:41: for(row=0; row<4; row++) {
+ 010B 05 09 583 inc _row
+ 010D E4 584 clr a
+ 010E B5 09 02 585 cjne a,_row,00147$
+ 0111 05 0A 586 inc (_row + 1)
+ 0113 587 00147$:
+ 00AF 588 C$keypad_display.c$84$1$1 ==.
+ 00AF 589 XG$main$0$0 ==.
+ 0113 02 00 69 590 ljmp 00118$
+ 591 .area CSEG (CODE)
+ 592 .area CONST (CODE)
+ 0000 593 Fkeypad_display$keypad$0$0 == .
+ 011A 594 _keypad:
+ 011A EF 595 .db #0xEF
+ 011B DF 596 .db #0xDF
+ 011C BF 597 .db #0xBF
+ 011D 7F 598 .db #0x7F
+ 0004 599 Fkeypad_display$display_0$0$0 == .
+ 011E 600 _display_0:
+ 011E F9 601 .db #0xF9
+ 011F 64 602 .db #0x64
+ 0120 70 603 .db #0x70
+ 0121 48 604 .db #0x48
+ 0008 605 Fkeypad_display$display_1$0$0 == .
+ 0122 606 _display_1:
+ 0122 59 607 .db #0x59
+ 0123 52 608 .db #0x52
+ 0124 42 609 .db #0x42
+ 0125 40 610 .db #0x40
+ 000C 611 Fkeypad_display$display_2$0$0 == .
+ 0126 612 _display_2:
+ 0126 F8 613 .db #0xF8
+ 0127 40 614 .db #0x40
+ 0128 50 615 .db #0x50
+ 0129 C6 616 .db #0xC6
+ 0010 617 Fkeypad_display$display_3$0$0 == .
+ 012A 618 _display_3:
+ 012A 79 619 .db #0x79
+ 012B C0 620 .db #0xC0
+ 012C 49 621 .db #0x49
+ 012D C0 622 .db #0xC0
+ 623 .area XINIT (CODE)
+ 624 .area CABS (ABS,CODE)
diff --git a/demo/keypad_display.sym b/demo/keypad_display.sym
new file mode 100644
index 0000000..eded721
--- /dev/null
+++ b/demo/keypad_display.sym
@@ -0,0 +1,712 @@
+ ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1.
+
+Symbol Table
+
+ A 00D6
+ D A$keypad_display$381 0000 GR
+ 15 A$keypad_display$396 0000 GR
+ D A$keypad_display$403 0003 GR
+ D A$keypad_display$405 0006 GR
+ 16 A$keypad_display$434 0000 GR
+ 16 A$keypad_display$435 0001 GR
+ 16 A$keypad_display$436 0003 GR
+ 16 A$keypad_display$438 0005 GR
+ 16 A$keypad_display$439 0006 GR
+ 16 A$keypad_display$440 0008 GR
+ 16 A$keypad_display$441 000A GR
+ 16 A$keypad_display$442 000C GR
+ 16 A$keypad_display$443 000E GR
+ 16 A$keypad_display$444 0010 GR
+ 16 A$keypad_display$447 0012 GR
+ 16 A$keypad_display$448 0014 GR
+ 16 A$keypad_display$449 0016 GR
+ 16 A$keypad_display$450 0018 GR
+ 16 A$keypad_display$451 001A GR
+ 16 A$keypad_display$452 001C GR
+ 16 A$keypad_display$453 001E GR
+ 16 A$keypad_display$454 001F GR
+ 16 A$keypad_display$455 0020 GR
+ 16 A$keypad_display$459 0022 GR
+ 16 A$keypad_display$463 0025 GR
+ 16 A$keypad_display$466 0028 GR
+ 16 A$keypad_display$469 002B GR
+ 16 A$keypad_display$470 002D GR
+ 16 A$keypad_display$473 0030 GR
+ 16 A$keypad_display$474 0033 GR
+ 16 A$keypad_display$478 0035 GR
+ 16 A$keypad_display$479 0037 GR
+ 16 A$keypad_display$482 003A GR
+ 16 A$keypad_display$483 003D GR
+ 16 A$keypad_display$487 003F GR
+ 16 A$keypad_display$488 0041 GR
+ 16 A$keypad_display$491 0044 GR
+ 16 A$keypad_display$492 0047 GR
+ 16 A$keypad_display$496 0049 GR
+ 16 A$keypad_display$497 004B GR
+ 16 A$keypad_display$498 004E GR
+ 16 A$keypad_display$502 0051 GR
+ 16 A$keypad_display$508 0054 GR
+ 16 A$keypad_display$509 0055 GR
+ 16 A$keypad_display$510 0058 GR
+ 16 A$keypad_display$511 0059 GR
+ 16 A$keypad_display$512 005C GR
+ 16 A$keypad_display$514 005E GR
+ 16 A$keypad_display$515 0060 GR
+ 16 A$keypad_display$516 0063 GR
+ 16 A$keypad_display$517 0064 GR
+ 16 A$keypad_display$518 0067 GR
+ 16 A$keypad_display$520 0069 GR
+ 16 A$keypad_display$521 006B GR
+ 16 A$keypad_display$522 006E GR
+ 16 A$keypad_display$523 006F GR
+ 16 A$keypad_display$524 0072 GR
+ 16 A$keypad_display$526 0074 GR
+ 16 A$keypad_display$527 0076 GR
+ 16 A$keypad_display$528 0079 GR
+ 16 A$keypad_display$529 007A GR
+ 16 A$keypad_display$530 007D GR
+ 16 A$keypad_display$534 007F GR
+ 16 A$keypad_display$538 0081 GR
+ 16 A$keypad_display$539 0083 GR
+ 16 A$keypad_display$540 0086 GR
+ 16 A$keypad_display$541 0087 GR
+ 16 A$keypad_display$546 0089 GR
+ 16 A$keypad_display$550 008B GR
+ 16 A$keypad_display$551 008D GR
+ 16 A$keypad_display$552 0090 GR
+ 16 A$keypad_display$553 0091 GR
+ 16 A$keypad_display$558 0093 GR
+ 16 A$keypad_display$562 0095 GR
+ 16 A$keypad_display$563 0097 GR
+ 16 A$keypad_display$564 009A GR
+ 16 A$keypad_display$565 009B GR
+ 16 A$keypad_display$570 009D GR
+ 16 A$keypad_display$574 009F GR
+ 16 A$keypad_display$575 00A1 GR
+ 16 A$keypad_display$576 00A4 GR
+ 16 A$keypad_display$577 00A5 GR
+ 16 A$keypad_display$583 00A7 GR
+ 16 A$keypad_display$584 00A9 GR
+ 16 A$keypad_display$585 00AA GR
+ 16 A$keypad_display$586 00AD GR
+ 16 A$keypad_display$590 00AF GR
+ AC 00D6
+ ACC 00E0
+ ACC.0 00E0
+ ACC.1 00E1
+ ACC.2 00E2
+ ACC.3 00E3
+ ACC.4 00E4
+ ACC.5 00E5
+ ACC.6 00E6
+ ACC.7 00E7
+ B 00F0
+ B.0 00F0
+ B.1 00F1
+ B.2 00F2
+ B.3 00F3
+ B.4 00F4
+ B.5 00F5
+ B.6 00F6
+ B.7 00F7
+ 16 C$keypad_display.c$38$0$0 = 0000 GR
+ 16 C$keypad_display.c$40$1$1 = 0000 GR
+ 16 C$keypad_display.c$41$2$2 = 00A7 GR
+ 16 C$keypad_display.c$42$3$3 = 0012 GR
+ 16 C$keypad_display.c$48$3$3 = 0022 GR
+ 16 C$keypad_display.c$53$3$3 = 0025 GR
+ 16 C$keypad_display.c$54$3$3 = 0028 GR
+ 16 C$keypad_display.c$56$3$3 = 002B GR
+ 16 C$keypad_display.c$57$4$4 = 0030 GR
+ 16 C$keypad_display.c$58$3$3 = 0035 GR
+ 16 C$keypad_display.c$59$4$5 = 003A GR
+ 16 C$keypad_display.c$60$3$3 = 003F GR
+ 16 C$keypad_display.c$61$4$6 = 0044 GR
+ 16 C$keypad_display.c$62$3$3 = 0049 GR
+ 16 C$keypad_display.c$63$4$7 = 0051 GR
+ 16 C$keypad_display.c$65$3$3 = 0054 GR
+ 16 C$keypad_display.c$68$3$3 = 0054 GR
+ 16 C$keypad_display.c$69$4$9 = 007F GR
+ 16 C$keypad_display.c$70$4$9 = 0081 GR
+ 16 C$keypad_display.c$71$4$9 = 0089 GR
+ 16 C$keypad_display.c$72$4$9 = 0089 GR
+ 16 C$keypad_display.c$73$4$9 = 008B GR
+ 16 C$keypad_display.c$74$4$9 = 0093 GR
+ 16 C$keypad_display.c$75$4$9 = 0093 GR
+ 16 C$keypad_display.c$76$4$9 = 0095 GR
+ 16 C$keypad_display.c$77$4$9 = 009D GR
+ 16 C$keypad_display.c$78$4$9 = 009D GR
+ 16 C$keypad_display.c$79$4$9 = 009F GR
+ 16 C$keypad_display.c$81$2$2 = 00A7 GR
+ 16 C$keypad_display.c$84$1$1 = 00AF GR
+ CPRL2 00C8
+ CT2 00C9
+ CY 00D7
+ DPH 0083
+ DPL 0082
+ EA 00AF
+ ES 00AC
+ ET0 00A9
+ ET1 00AB
+ ET2 00AD
+ EX0 00A8
+ EX1 00AA
+ EXEN2 00CB
+ EXF2 00CE
+ F0 00D5
+ 17 Fkeypad_display$display_0$0$0 = 0004 GR
+ 17 Fkeypad_display$display_1$0$0 = 0008 GR
+ 17 Fkeypad_display$display_2$0$0 = 000C GR
+ 17 Fkeypad_display$display_3$0$0 = 0010 GR
+ 17 Fkeypad_display$keypad$0$0 = 0000 GR
+ G$AC$0$0 = 00D6 G
+ G$ACC$0$0 = 00E0 G
+ G$B$0$0 = 00F0 G
+ G$CY$0$0 = 00D7 G
+ G$DPH$0$0 = 0083 G
+ G$DPL$0$0 = 0082 G
+ G$EA$0$0 = 00AF G
+ G$ES$0$0 = 00AC G
+ G$ET0$0$0 = 00A9 G
+ G$ET1$0$0 = 00AB G
+ G$EX0$0$0 = 00A8 G
+ G$EX1$0$0 = 00AA G
+ G$F0$0$0 = 00D5 G
+ G$F1$0$0 = 00D1 G
+ G$IE$0$0 = 00A8 G
+ G$IE0$0$0 = 0089 G
+ G$IE1$0$0 = 008B G
+ G$INT0$0$0 = 00B2 G
+ G$INT1$0$0 = 00B3 G
+ G$IP$0$0 = 00B8 G
+ G$IT0$0$0 = 0088 G
+ G$IT1$0$0 = 008A G
+ G$OV$0$0 = 00D2 G
+ G$P$0$0 = 00D0 G
+ G$P0$0$0 = 0080 G
+ G$P0_0$0$0 = 0080 G
+ G$P0_1$0$0 = 0081 G
+ G$P0_2$0$0 = 0082 G
+ G$P0_3$0$0 = 0083 G
+ G$P0_4$0$0 = 0084 G
+ G$P0_5$0$0 = 0085 G
+ G$P0_6$0$0 = 0086 G
+ G$P0_7$0$0 = 0087 G
+ G$P1$0$0 = 0090 G
+ G$P1_0$0$0 = 0090 G
+ G$P1_1$0$0 = 0091 G
+ G$P1_2$0$0 = 0092 G
+ G$P1_3$0$0 = 0093 G
+ G$P1_4$0$0 = 0094 G
+ G$P1_5$0$0 = 0095 G
+ G$P1_6$0$0 = 0096 G
+ G$P1_7$0$0 = 0097 G
+ G$P2$0$0 = 00A0 G
+ G$P2_0$0$0 = 00A0 G
+ G$P2_1$0$0 = 00A1 G
+ G$P2_2$0$0 = 00A2 G
+ G$P2_3$0$0 = 00A3 G
+ G$P2_4$0$0 = 00A4 G
+ G$P2_5$0$0 = 00A5 G
+ G$P2_6$0$0 = 00A6 G
+ G$P2_7$0$0 = 00A7 G
+ G$P3$0$0 = 00B0 G
+ G$P3_0$0$0 = 00B0 G
+ G$P3_1$0$0 = 00B1 G
+ G$P3_2$0$0 = 00B2 G
+ G$P3_3$0$0 = 00B3 G
+ G$P3_4$0$0 = 00B4 G
+ G$P3_5$0$0 = 00B5 G
+ G$P3_6$0$0 = 00B6 G
+ G$P3_7$0$0 = 00B7 G
+ G$PCON$0$0 = 0087 G
+ G$PS$0$0 = 00BC G
+ G$PSW$0$0 = 00D0 G
+ G$PT0$0$0 = 00B9 G
+ G$PT1$0$0 = 00BB G
+ G$PX0$0$0 = 00B8 G
+ G$PX1$0$0 = 00BA G
+ G$RB8$0$0 = 009A G
+ G$RD$0$0 = 00B7 G
+ G$REN$0$0 = 009C G
+ G$RI$0$0 = 0098 G
+ G$RS0$0$0 = 00D3 G
+ G$RS1$0$0 = 00D4 G
+ G$RXD$0$0 = 00B0 G
+ G$SBUF$0$0 = 0099 G
+ G$SCON$0$0 = 0098 G
+ G$SM0$0$0 = 009F G
+ G$SM1$0$0 = 009E G
+ G$SM2$0$0 = 009D G
+ G$SP$0$0 = 0081 G
+ G$T0$0$0 = 00B4 G
+ G$T1$0$0 = 00B5 G
+ G$TB8$0$0 = 009B G
+ G$TCON$0$0 = 0088 G
+ G$TF0$0$0 = 008D G
+ G$TF1$0$0 = 008F G
+ G$TH0$0$0 = 008C G
+ G$TH1$0$0 = 008D G
+ G$TI$0$0 = 0099 G
+ G$TL0$0$0 = 008A G
+ G$TL1$0$0 = 008B G
+ G$TMOD$0$0 = 0089 G
+ G$TR0$0$0 = 008C G
+ G$TR1$0$0 = 008E G
+ G$TXD$0$0 = 00B1 G
+ G$WR$0$0 = 00B6 G
+ 16 G$main$0$0 = 0000 GR
+ 3 G$row$0$0 = 0001 GR
+ 3 G$state$0$0 = 0000 GR
+ IE 00A8
+ IE.0 00A8
+ IE.1 00A9
+ IE.2 00AA
+ IE.3 00AB
+ IE.4 00AC
+ IE.5 00AD
+ IE.7 00AF
+ IE0 0089
+ IE1 008B
+ INT0 00B2
+ INT1 00B3
+ IP 00B8
+ IP.0 00B8
+ IP.1 00B9
+ IP.2 00BA
+ IP.3 00BB
+ IP.4 00BC
+ IP.5 00BD
+ IT0 0088
+ IT1 008A
+ OV 00D2
+ P 00D0
+ P0 0080
+ P0.0 0080
+ P0.1 0081
+ P0.2 0082
+ P0.3 0083
+ P0.4 0084
+ P0.5 0085
+ P0.6 0086
+ P0.7 0087
+ P1 0090
+ P1.0 0090
+ P1.1 0091
+ P1.2 0092
+ P1.3 0093
+ P1.4 0094
+ P1.5 0095
+ P1.6 0096
+ P1.7 0097
+ P2 00A0
+ P2.0 00A0
+ P2.1 00A1
+ P2.2 00A2
+ P2.3 00A3
+ P2.4 00A4
+ P2.5 00A5
+ P2.6 00A6
+ P2.7 00A7
+ P3 00B0
+ P3.0 00B0
+ P3.1 00B1
+ P3.2 00B2
+ P3.3 00B3
+ P3.4 00B4
+ P3.5 00B5
+ P3.6 00B6
+ P3.7 00B7
+ PCON 0087
+ PS 00BC
+ PSW 00D0
+ PSW.0 00D0
+ PSW.1 00D1
+ PSW.2 00D2
+ PSW.3 00D3
+ PSW.4 00D4
+ PSW.5 00D5
+ PSW.6 00D6
+ PSW.7 00D7
+ PT0 00B9
+ PT1 00BB
+ PT2 00BD
+ PX0 00B8
+ PX1 00BA
+ RB8 009A
+ RCAP2H 00CB
+ RCAP2L 00CA
+ RCLK 00CD
+ REN 009C
+ RI 0098
+ RS0 00D3
+ RS1 00D4
+ RXD 00B0
+ SBUF 0099
+ SCON 0098
+ SCON.0 0098
+ SCON.1 0099
+ SCON.2 009A
+ SCON.3 009B
+ SCON.4 009C
+ SCON.5 009D
+ SCON.6 009E
+ SCON.7 009F
+ SM0 009F
+ SM1 009E
+ SM2 009D
+ SP 0081
+ T2CON 00C8
+ T2CON.0 00C8
+ T2CON.1 00C9
+ T2CON.2 00CA
+ T2CON.3 00CB
+ T2CON.4 00CC
+ T2CON.5 00CD
+ T2CON.6 00CE
+ T2CON.7 00CF
+ TB8 009B
+ TCLK 00CC
+ TCON 0088
+ TCON.0 0088
+ TCON.1 0089
+ TCON.2 008A
+ TCON.3 008B
+ TCON.4 008C
+ TCON.5 008D
+ TCON.6 008E
+ TCON.7 008F
+ TF0 008D
+ TF1 008F
+ TF2 00CF
+ TH0 008C
+ TH1 008D
+ TH2 00CD
+ TI 0099
+ TL0 008A
+ TL1 008B
+ TL2 00CC
+ TMOD 0089
+ TR0 008C
+ TR1 008E
+ TR2 00CA
+ TXD 00B1
+ 16 XG$main$0$0 = 00AF GR
+ _AC = 00D6 G
+ _ACC = 00E0 G
+ _B = 00F0 G
+ _CY = 00D7 G
+ _DPH = 0083 G
+ _DPL = 0082 G
+ _EA = 00AF G
+ _ES = 00AC G
+ _ET0 = 00A9 G
+ _ET1 = 00AB G
+ _EX0 = 00A8 G
+ _EX1 = 00AA G
+ _F0 = 00D5 G
+ _F1 = 00D1 G
+ _IE = 00A8 G
+ _IE0 = 0089 G
+ _IE1 = 008B G
+ _INT0 = 00B2 G
+ _INT1 = 00B3 G
+ _IP = 00B8 G
+ _IT0 = 0088 G
+ _IT1 = 008A G
+ _OV = 00D2 G
+ _P = 00D0 G
+ _P0 = 0080 G
+ _P0_0 = 0080 G
+ _P0_1 = 0081 G
+ _P0_2 = 0082 G
+ _P0_3 = 0083 G
+ _P0_4 = 0084 G
+ _P0_5 = 0085 G
+ _P0_6 = 0086 G
+ _P0_7 = 0087 G
+ _P1 = 0090 G
+ _P1_0 = 0090 G
+ _P1_1 = 0091 G
+ _P1_2 = 0092 G
+ _P1_3 = 0093 G
+ _P1_4 = 0094 G
+ _P1_5 = 0095 G
+ _P1_6 = 0096 G
+ _P1_7 = 0097 G
+ _P2 = 00A0 G
+ _P2_0 = 00A0 G
+ _P2_1 = 00A1 G
+ _P2_2 = 00A2 G
+ _P2_3 = 00A3 G
+ _P2_4 = 00A4 G
+ _P2_5 = 00A5 G
+ _P2_6 = 00A6 G
+ _P2_7 = 00A7 G
+ _P3 = 00B0 G
+ _P3_0 = 00B0 G
+ _P3_1 = 00B1 G
+ _P3_2 = 00B2 G
+ _P3_3 = 00B3 G
+ _P3_4 = 00B4 G
+ _P3_5 = 00B5 G
+ _P3_6 = 00B6 G
+ _P3_7 = 00B7 G
+ _PCON = 0087 G
+ _PS = 00BC G
+ _PSW = 00D0 G
+ _PT0 = 00B9 G
+ _PT1 = 00BB G
+ _PX0 = 00B8 G
+ _PX1 = 00BA G
+ _RB8 = 009A G
+ _RD = 00B7 G
+ _REN = 009C G
+ _RI = 0098 G
+ _RS0 = 00D3 G
+ _RS1 = 00D4 G
+ _RXD = 00B0 G
+ _SBUF = 0099 G
+ _SCON = 0098 G
+ _SM0 = 009F G
+ _SM1 = 009E G
+ _SM2 = 009D G
+ _SP = 0081 G
+ _T0 = 00B4 G
+ _T1 = 00B5 G
+ _TB8 = 009B G
+ _TCON = 0088 G
+ _TF0 = 008D G
+ _TF1 = 008F G
+ _TH0 = 008C G
+ _TH1 = 008D G
+ _TI = 0099 G
+ _TL0 = 008A G
+ _TL1 = 008B G
+ _TMOD = 0089 G
+ _TR0 = 008C G
+ _TR1 = 008E G
+ _TXD = 00B1 G
+ _WR = 00B6 G
+ D __interrupt_vect 0000 R
+ __mcs51_genRAMCLEAR **** GX
+ __mcs51_genXINIT **** GX
+ __mcs51_genXRAMCLEAR **** GX
+ __sdcc_gsinit_startup **** GX
+ D __sdcc_program_startup 0003 GR
+ 5 __start__stack 0000 GR
+ 17 _display_0 0004 R
+ 17 _display_1 0008 R
+ 17 _display_2 000C R
+ 17 _display_3 0010 R
+ 17 _keypad 0000 R
+ 16 _main 0000 GR
+ 3 _row 0001 GR
+ 3 _state 0000 GR
+ a 00D6
+ ac 00D6
+ acc 00E0
+ acc.0 00E0
+ acc.1 00E1
+ acc.2 00E2
+ acc.3 00E3
+ acc.4 00E4
+ acc.5 00E5
+ acc.6 00E6
+ acc.7 00E7
+ ar0 = 0000
+ ar1 = 0001
+ ar2 = 0002
+ ar3 = 0003
+ ar4 = 0004
+ ar5 = 0005
+ ar6 = 0006
+ ar7 = 0007
+ b 00F0
+ b.0 00F0
+ b.1 00F1
+ b.2 00F2
+ b.3 00F3
+ b.4 00F4
+ b.5 00F5
+ b.6 00F6
+ b.7 00F7
+ cprl2 00C8
+ ct2 00C9
+ cy 00D7
+ dph 0083
+ dpl 0082
+ ea 00AF
+ es 00AC
+ et0 00A9
+ et1 00AB
+ et2 00AD
+ ex0 00A8
+ ex1 00AA
+ exen2 00CB
+ exf2 00CE
+ f0 00D5
+ ie 00A8
+ ie.0 00A8
+ ie.1 00A9
+ ie.2 00AA
+ ie.3 00AB
+ ie.4 00AC
+ ie.5 00AD
+ ie.7 00AF
+ ie0 0089
+ ie1 008B
+ int0 00B2
+ int1 00B3
+ ip 00B8
+ ip.0 00B8
+ ip.1 00B9
+ ip.2 00BA
+ ip.3 00BB
+ ip.4 00BC
+ ip.5 00BD
+ it0 0088
+ it1 008A
+ ov 00D2
+ p 00D0
+ p0 0080
+ p0.0 0080
+ p0.1 0081
+ p0.2 0082
+ p0.3 0083
+ p0.4 0084
+ p0.5 0085
+ p0.6 0086
+ p0.7 0087
+ p1 0090
+ p1.0 0090
+ p1.1 0091
+ p1.2 0092
+ p1.3 0093
+ p1.4 0094
+ p1.5 0095
+ p1.6 0096
+ p1.7 0097
+ p2 00A0
+ p2.0 00A0
+ p2.1 00A1
+ p2.2 00A2
+ p2.3 00A3
+ p2.4 00A4
+ p2.5 00A5
+ p2.6 00A6
+ p2.7 00A7
+ p3 00B0
+ p3.0 00B0
+ p3.1 00B1
+ p3.2 00B2
+ p3.3 00B3
+ p3.4 00B4
+ p3.5 00B5
+ p3.6 00B6
+ p3.7 00B7
+ pcon 0087
+ ps 00BC
+ psw 00D0
+ psw.0 00D0
+ psw.1 00D1
+ psw.2 00D2
+ psw.3 00D3
+ psw.4 00D4
+ psw.5 00D5
+ psw.6 00D6
+ psw.7 00D7
+ pt0 00B9
+ pt1 00BB
+ pt2 00BD
+ px0 00B8
+ px1 00BA
+ rb8 009A
+ rcap2h 00CB
+ rcap2l 00CA
+ rclk 00CD
+ ren 009C
+ ri 0098
+ rs0 00D3
+ rs1 00D4
+ rxd 00B0
+ sbuf 0099
+ scon 0098
+ scon.0 0098
+ scon.1 0099
+ scon.2 009A
+ scon.3 009B
+ scon.4 009C
+ scon.5 009D
+ scon.6 009E
+ scon.7 009F
+ sm0 009F
+ sm1 009E
+ sm2 009D
+ sp 0081
+ t2con 00C8
+ t2con.0 00C8
+ t2con.1 00C9
+ t2con.2 00CA
+ t2con.3 00CB
+ t2con.4 00CC
+ t2con.5 00CD
+ t2con.6 00CE
+ t2con.7 00CF
+ tb8 009B
+ tclk 00CC
+ tcon 0088
+ tcon.0 0088
+ tcon.1 0089
+ tcon.2 008A
+ tcon.3 008B
+ tcon.4 008C
+ tcon.5 008D
+ tcon.6 008E
+ tcon.7 008F
+ tf0 008D
+ tf1 008F
+ tf2 00CF
+ th0 008C
+ th1 008D
+ th2 00CD
+ ti 0099
+ tl0 008A
+ tl1 008B
+ tl2 00CC
+ tmod 0089
+ tr0 008C
+ tr1 008E
+ tr2 00CA
+ txd 00B1
+
+ ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2.
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 RSEG size 0 flags 0
+ 2 REG_BANK_0 size 8 flags 4
+ 3 DSEG size 3 flags 0
+ 4 OSEG size 0 flags 4
+ 5 SSEG size 1 flags 0
+ 6 ISEG size 0 flags 0
+ 7 IABS size 0 flags 8
+ 8 BSEG size 0 flags 80
+ 9 PSEG size 0 flags 50
+ A XSEG size 0 flags 40
+ B XABS size 0 flags 48
+ C XISEG size 0 flags 40
+ D HOME size 8 flags 20
+ E GSINIT0 size 0 flags 20
+ F GSINIT1 size 0 flags 20
+ 10 GSINIT2 size 0 flags 20
+ 11 GSINIT3 size 0 flags 20
+ 12 GSINIT4 size 0 flags 20
+ 13 GSINIT5 size 0 flags 20
+ 14 GSINIT size 0 flags 20
+ 15 GSFINAL size 3 flags 20
+ 16 CSEG size B2 flags 20
+ 17 CONST size 14 flags 20
+ 18 XINIT size 0 flags 20
+ 19 CABS size 0 flags 28
diff --git a/demo/keypad_display.vhw b/demo/keypad_display.vhw
new file mode 100644
index 0000000..0a716f1
--- /dev/null
+++ b/demo/keypad_display.vhw
@@ -0,0 +1,6 @@
+# MCU 8051 IDE: Virtual HW configuration file
+# Date: 10/27/2009
+# Project: Demo-project
+
+LedDisplay {{4 3 0 3 5 3 1 3 6 3 2 3 7 3 3 3} {4 3 0 7 5 2 1 6 6 0 2 5 7 - 3 4} 230x170+335+204 {Number of pressed key} red 1}
+MatrixKeyPad {{4 1 0 1 5 1 1 1 6 1 2 1 7 1 3 1} {4 7 0 3 5 6 1 2 6 5 2 1 7 4 3 0} 225x235+79+174 {Pres any button and wait ...} {0 0 1 0 2 1 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0} 1}
diff --git a/demo/ledmatrix.adb b/demo/ledmatrix.adb
new file mode 100644
index 0000000..d573f21
--- /dev/null
+++ b/demo/ledmatrix.adb
@@ -0,0 +1,102 @@
+M:ledmatrix
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+S:Lmain$i$1$1({2}SI:S),R,0,0,[r2,r3]
+S:G$P0$0$0({1}SC:U),I,0,0
+S:G$SP$0$0({1}SC:U),I,0,0
+S:G$DPL$0$0({1}SC:U),I,0,0
+S:G$DPH$0$0({1}SC:U),I,0,0
+S:G$PCON$0$0({1}SC:U),I,0,0
+S:G$TCON$0$0({1}SC:U),I,0,0
+S:G$TMOD$0$0({1}SC:U),I,0,0
+S:G$TL0$0$0({1}SC:U),I,0,0
+S:G$TL1$0$0({1}SC:U),I,0,0
+S:G$TH0$0$0({1}SC:U),I,0,0
+S:G$TH1$0$0({1}SC:U),I,0,0
+S:G$P1$0$0({1}SC:U),I,0,0
+S:G$SCON$0$0({1}SC:U),I,0,0
+S:G$SBUF$0$0({1}SC:U),I,0,0
+S:G$P2$0$0({1}SC:U),I,0,0
+S:G$IE$0$0({1}SC:U),I,0,0
+S:G$P3$0$0({1}SC:U),I,0,0
+S:G$IP$0$0({1}SC:U),I,0,0
+S:G$PSW$0$0({1}SC:U),I,0,0
+S:G$ACC$0$0({1}SC:U),I,0,0
+S:G$A$0$0({1}SC:U),I,0,0
+S:G$B$0$0({1}SC:U),I,0,0
+S:G$P0_0$0$0({1}SX:U),J,0,0
+S:G$P0_1$0$0({1}SX:U),J,0,0
+S:G$P0_2$0$0({1}SX:U),J,0,0
+S:G$P0_3$0$0({1}SX:U),J,0,0
+S:G$P0_4$0$0({1}SX:U),J,0,0
+S:G$P0_5$0$0({1}SX:U),J,0,0
+S:G$P0_6$0$0({1}SX:U),J,0,0
+S:G$P0_7$0$0({1}SX:U),J,0,0
+S:G$IT0$0$0({1}SX:U),J,0,0
+S:G$IE0$0$0({1}SX:U),J,0,0
+S:G$IT1$0$0({1}SX:U),J,0,0
+S:G$IE1$0$0({1}SX:U),J,0,0
+S:G$TR0$0$0({1}SX:U),J,0,0
+S:G$TF0$0$0({1}SX:U),J,0,0
+S:G$TR1$0$0({1}SX:U),J,0,0
+S:G$TF1$0$0({1}SX:U),J,0,0
+S:G$P1_0$0$0({1}SX:U),J,0,0
+S:G$P1_1$0$0({1}SX:U),J,0,0
+S:G$P1_2$0$0({1}SX:U),J,0,0
+S:G$P1_3$0$0({1}SX:U),J,0,0
+S:G$P1_4$0$0({1}SX:U),J,0,0
+S:G$P1_5$0$0({1}SX:U),J,0,0
+S:G$P1_6$0$0({1}SX:U),J,0,0
+S:G$P1_7$0$0({1}SX:U),J,0,0
+S:G$RI$0$0({1}SX:U),J,0,0
+S:G$TI$0$0({1}SX:U),J,0,0
+S:G$RB8$0$0({1}SX:U),J,0,0
+S:G$TB8$0$0({1}SX:U),J,0,0
+S:G$REN$0$0({1}SX:U),J,0,0
+S:G$SM2$0$0({1}SX:U),J,0,0
+S:G$SM1$0$0({1}SX:U),J,0,0
+S:G$SM0$0$0({1}SX:U),J,0,0
+S:G$P2_0$0$0({1}SX:U),J,0,0
+S:G$P2_1$0$0({1}SX:U),J,0,0
+S:G$P2_2$0$0({1}SX:U),J,0,0
+S:G$P2_3$0$0({1}SX:U),J,0,0
+S:G$P2_4$0$0({1}SX:U),J,0,0
+S:G$P2_5$0$0({1}SX:U),J,0,0
+S:G$P2_6$0$0({1}SX:U),J,0,0
+S:G$P2_7$0$0({1}SX:U),J,0,0
+S:G$EX0$0$0({1}SX:U),J,0,0
+S:G$ET0$0$0({1}SX:U),J,0,0
+S:G$EX1$0$0({1}SX:U),J,0,0
+S:G$ET1$0$0({1}SX:U),J,0,0
+S:G$ES$0$0({1}SX:U),J,0,0
+S:G$EA$0$0({1}SX:U),J,0,0
+S:G$P3_0$0$0({1}SX:U),J,0,0
+S:G$P3_1$0$0({1}SX:U),J,0,0
+S:G$P3_2$0$0({1}SX:U),J,0,0
+S:G$P3_3$0$0({1}SX:U),J,0,0
+S:G$P3_4$0$0({1}SX:U),J,0,0
+S:G$P3_5$0$0({1}SX:U),J,0,0
+S:G$P3_6$0$0({1}SX:U),J,0,0
+S:G$P3_7$0$0({1}SX:U),J,0,0
+S:G$RXD$0$0({1}SX:U),J,0,0
+S:G$TXD$0$0({1}SX:U),J,0,0
+S:G$INT0$0$0({1}SX:U),J,0,0
+S:G$INT1$0$0({1}SX:U),J,0,0
+S:G$T0$0$0({1}SX:U),J,0,0
+S:G$T1$0$0({1}SX:U),J,0,0
+S:G$WR$0$0({1}SX:U),J,0,0
+S:G$RD$0$0({1}SX:U),J,0,0
+S:G$PX0$0$0({1}SX:U),J,0,0
+S:G$PT0$0$0({1}SX:U),J,0,0
+S:G$PX1$0$0({1}SX:U),J,0,0
+S:G$PT1$0$0({1}SX:U),J,0,0
+S:G$PS$0$0({1}SX:U),J,0,0
+S:G$P$0$0({1}SX:U),J,0,0
+S:G$FL$0$0({1}SX:U),J,0,0
+S:G$OV$0$0({1}SX:U),J,0,0
+S:G$RS0$0$0({1}SX:U),J,0,0
+S:G$RS1$0$0({1}SX:U),J,0,0
+S:G$F0$0$0({1}SX:U),J,0,0
+S:G$AC$0$0({1}SX:U),J,0,0
+S:G$CY$0$0({1}SX:U),J,0,0
+S:G$main$0$0({2}DF,SI:S),C,0,0
+S:Fledmatrix$image$0$0({8}DA8,SC:S),D,0,0
diff --git a/demo/ledmatrix.asm b/demo/ledmatrix.asm
new file mode 100644
index 0000000..d1b8e55
--- /dev/null
+++ b/demo/ledmatrix.asm
@@ -0,0 +1,494 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+; This file was generated Mon Oct 19 23:11:07 2009
+;--------------------------------------------------------
+ .module ledmatrix
+ .optsdcc -mmcs51 --model-small
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _main
+ .globl _CY
+ .globl _AC
+ .globl _F0
+ .globl _RS1
+ .globl _RS0
+ .globl _OV
+ .globl _FL
+ .globl _P
+ .globl _PS
+ .globl _PT1
+ .globl _PX1
+ .globl _PT0
+ .globl _PX0
+ .globl _RD
+ .globl _WR
+ .globl _T1
+ .globl _T0
+ .globl _INT1
+ .globl _INT0
+ .globl _TXD
+ .globl _RXD
+ .globl _P3_7
+ .globl _P3_6
+ .globl _P3_5
+ .globl _P3_4
+ .globl _P3_3
+ .globl _P3_2
+ .globl _P3_1
+ .globl _P3_0
+ .globl _EA
+ .globl _ES
+ .globl _ET1
+ .globl _EX1
+ .globl _ET0
+ .globl _EX0
+ .globl _P2_7
+ .globl _P2_6
+ .globl _P2_5
+ .globl _P2_4
+ .globl _P2_3
+ .globl _P2_2
+ .globl _P2_1
+ .globl _P2_0
+ .globl _SM0
+ .globl _SM1
+ .globl _SM2
+ .globl _REN
+ .globl _TB8
+ .globl _RB8
+ .globl _TI
+ .globl _RI
+ .globl _P1_7
+ .globl _P1_6
+ .globl _P1_5
+ .globl _P1_4
+ .globl _P1_3
+ .globl _P1_2
+ .globl _P1_1
+ .globl _P1_0
+ .globl _TF1
+ .globl _TR1
+ .globl _TF0
+ .globl _TR0
+ .globl _IE1
+ .globl _IT1
+ .globl _IE0
+ .globl _IT0
+ .globl _P0_7
+ .globl _P0_6
+ .globl _P0_5
+ .globl _P0_4
+ .globl _P0_3
+ .globl _P0_2
+ .globl _P0_1
+ .globl _P0_0
+ .globl _B
+ .globl _A
+ .globl _ACC
+ .globl _PSW
+ .globl _IP
+ .globl _P3
+ .globl _IE
+ .globl _P2
+ .globl _SBUF
+ .globl _SCON
+ .globl _P1
+ .globl _TH1
+ .globl _TH0
+ .globl _TL1
+ .globl _TL0
+ .globl _TMOD
+ .globl _TCON
+ .globl _PCON
+ .globl _DPH
+ .globl _DPL
+ .globl _SP
+ .globl _P0
+;--------------------------------------------------------
+; special function registers
+;--------------------------------------------------------
+ .area RSEG (DATA)
+G$P0$0$0 == 0x0080
+_P0 = 0x0080
+G$SP$0$0 == 0x0081
+_SP = 0x0081
+G$DPL$0$0 == 0x0082
+_DPL = 0x0082
+G$DPH$0$0 == 0x0083
+_DPH = 0x0083
+G$PCON$0$0 == 0x0087
+_PCON = 0x0087
+G$TCON$0$0 == 0x0088
+_TCON = 0x0088
+G$TMOD$0$0 == 0x0089
+_TMOD = 0x0089
+G$TL0$0$0 == 0x008a
+_TL0 = 0x008a
+G$TL1$0$0 == 0x008b
+_TL1 = 0x008b
+G$TH0$0$0 == 0x008c
+_TH0 = 0x008c
+G$TH1$0$0 == 0x008d
+_TH1 = 0x008d
+G$P1$0$0 == 0x0090
+_P1 = 0x0090
+G$SCON$0$0 == 0x0098
+_SCON = 0x0098
+G$SBUF$0$0 == 0x0099
+_SBUF = 0x0099
+G$P2$0$0 == 0x00a0
+_P2 = 0x00a0
+G$IE$0$0 == 0x00a8
+_IE = 0x00a8
+G$P3$0$0 == 0x00b0
+_P3 = 0x00b0
+G$IP$0$0 == 0x00b8
+_IP = 0x00b8
+G$PSW$0$0 == 0x00d0
+_PSW = 0x00d0
+G$ACC$0$0 == 0x00e0
+_ACC = 0x00e0
+G$A$0$0 == 0x00e0
+_A = 0x00e0
+G$B$0$0 == 0x00f0
+_B = 0x00f0
+;--------------------------------------------------------
+; special function bits
+;--------------------------------------------------------
+ .area RSEG (DATA)
+G$P0_0$0$0 == 0x0080
+_P0_0 = 0x0080
+G$P0_1$0$0 == 0x0081
+_P0_1 = 0x0081
+G$P0_2$0$0 == 0x0082
+_P0_2 = 0x0082
+G$P0_3$0$0 == 0x0083
+_P0_3 = 0x0083
+G$P0_4$0$0 == 0x0084
+_P0_4 = 0x0084
+G$P0_5$0$0 == 0x0085
+_P0_5 = 0x0085
+G$P0_6$0$0 == 0x0086
+_P0_6 = 0x0086
+G$P0_7$0$0 == 0x0087
+_P0_7 = 0x0087
+G$IT0$0$0 == 0x0088
+_IT0 = 0x0088
+G$IE0$0$0 == 0x0089
+_IE0 = 0x0089
+G$IT1$0$0 == 0x008a
+_IT1 = 0x008a
+G$IE1$0$0 == 0x008b
+_IE1 = 0x008b
+G$TR0$0$0 == 0x008c
+_TR0 = 0x008c
+G$TF0$0$0 == 0x008d
+_TF0 = 0x008d
+G$TR1$0$0 == 0x008e
+_TR1 = 0x008e
+G$TF1$0$0 == 0x008f
+_TF1 = 0x008f
+G$P1_0$0$0 == 0x0090
+_P1_0 = 0x0090
+G$P1_1$0$0 == 0x0091
+_P1_1 = 0x0091
+G$P1_2$0$0 == 0x0092
+_P1_2 = 0x0092
+G$P1_3$0$0 == 0x0093
+_P1_3 = 0x0093
+G$P1_4$0$0 == 0x0094
+_P1_4 = 0x0094
+G$P1_5$0$0 == 0x0095
+_P1_5 = 0x0095
+G$P1_6$0$0 == 0x0096
+_P1_6 = 0x0096
+G$P1_7$0$0 == 0x0097
+_P1_7 = 0x0097
+G$RI$0$0 == 0x0098
+_RI = 0x0098
+G$TI$0$0 == 0x0099
+_TI = 0x0099
+G$RB8$0$0 == 0x009a
+_RB8 = 0x009a
+G$TB8$0$0 == 0x009b
+_TB8 = 0x009b
+G$REN$0$0 == 0x009c
+_REN = 0x009c
+G$SM2$0$0 == 0x009d
+_SM2 = 0x009d
+G$SM1$0$0 == 0x009e
+_SM1 = 0x009e
+G$SM0$0$0 == 0x009f
+_SM0 = 0x009f
+G$P2_0$0$0 == 0x00a0
+_P2_0 = 0x00a0
+G$P2_1$0$0 == 0x00a1
+_P2_1 = 0x00a1
+G$P2_2$0$0 == 0x00a2
+_P2_2 = 0x00a2
+G$P2_3$0$0 == 0x00a3
+_P2_3 = 0x00a3
+G$P2_4$0$0 == 0x00a4
+_P2_4 = 0x00a4
+G$P2_5$0$0 == 0x00a5
+_P2_5 = 0x00a5
+G$P2_6$0$0 == 0x00a6
+_P2_6 = 0x00a6
+G$P2_7$0$0 == 0x00a7
+_P2_7 = 0x00a7
+G$EX0$0$0 == 0x00a8
+_EX0 = 0x00a8
+G$ET0$0$0 == 0x00a9
+_ET0 = 0x00a9
+G$EX1$0$0 == 0x00aa
+_EX1 = 0x00aa
+G$ET1$0$0 == 0x00ab
+_ET1 = 0x00ab
+G$ES$0$0 == 0x00ac
+_ES = 0x00ac
+G$EA$0$0 == 0x00af
+_EA = 0x00af
+G$P3_0$0$0 == 0x00b0
+_P3_0 = 0x00b0
+G$P3_1$0$0 == 0x00b1
+_P3_1 = 0x00b1
+G$P3_2$0$0 == 0x00b2
+_P3_2 = 0x00b2
+G$P3_3$0$0 == 0x00b3
+_P3_3 = 0x00b3
+G$P3_4$0$0 == 0x00b4
+_P3_4 = 0x00b4
+G$P3_5$0$0 == 0x00b5
+_P3_5 = 0x00b5
+G$P3_6$0$0 == 0x00b6
+_P3_6 = 0x00b6
+G$P3_7$0$0 == 0x00b7
+_P3_7 = 0x00b7
+G$RXD$0$0 == 0x00b0
+_RXD = 0x00b0
+G$TXD$0$0 == 0x00b1
+_TXD = 0x00b1
+G$INT0$0$0 == 0x00b2
+_INT0 = 0x00b2
+G$INT1$0$0 == 0x00b3
+_INT1 = 0x00b3
+G$T0$0$0 == 0x00b4
+_T0 = 0x00b4
+G$T1$0$0 == 0x00b5
+_T1 = 0x00b5
+G$WR$0$0 == 0x00b6
+_WR = 0x00b6
+G$RD$0$0 == 0x00b7
+_RD = 0x00b7
+G$PX0$0$0 == 0x00b8
+_PX0 = 0x00b8
+G$PT0$0$0 == 0x00b9
+_PT0 = 0x00b9
+G$PX1$0$0 == 0x00ba
+_PX1 = 0x00ba
+G$PT1$0$0 == 0x00bb
+_PT1 = 0x00bb
+G$PS$0$0 == 0x00bc
+_PS = 0x00bc
+G$P$0$0 == 0x00d0
+_P = 0x00d0
+G$FL$0$0 == 0x00d1
+_FL = 0x00d1
+G$OV$0$0 == 0x00d2
+_OV = 0x00d2
+G$RS0$0$0 == 0x00d3
+_RS0 = 0x00d3
+G$RS1$0$0 == 0x00d4
+_RS1 = 0x00d4
+G$F0$0$0 == 0x00d5
+_F0 = 0x00d5
+G$AC$0$0 == 0x00d6
+_AC = 0x00d6
+G$CY$0$0 == 0x00d7
+_CY = 0x00d7
+;--------------------------------------------------------
+; overlayable register banks
+;--------------------------------------------------------
+ .area REG_BANK_0 (REL,OVR,DATA)
+ .ds 8
+;--------------------------------------------------------
+; internal ram data
+;--------------------------------------------------------
+ .area DSEG (DATA)
+;--------------------------------------------------------
+; overlayable items in internal ram
+;--------------------------------------------------------
+ .area OSEG (OVR,DATA)
+;--------------------------------------------------------
+; Stack segment in internal ram
+;--------------------------------------------------------
+ .area SSEG (DATA)
+__start__stack:
+ .ds 1
+
+;--------------------------------------------------------
+; indirectly addressable internal ram data
+;--------------------------------------------------------
+ .area ISEG (DATA)
+;--------------------------------------------------------
+; absolute internal ram data
+;--------------------------------------------------------
+ .area IABS (ABS,DATA)
+ .area IABS (ABS,DATA)
+;--------------------------------------------------------
+; bit data
+;--------------------------------------------------------
+ .area BSEG (BIT)
+;--------------------------------------------------------
+; paged external ram data
+;--------------------------------------------------------
+ .area PSEG (PAG,XDATA)
+;--------------------------------------------------------
+; external ram data
+;--------------------------------------------------------
+ .area XSEG (XDATA)
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area XABS (ABS,XDATA)
+;--------------------------------------------------------
+; external initialized ram data
+;--------------------------------------------------------
+ .area XISEG (XDATA)
+ .area HOME (CODE)
+ .area GSINIT0 (CODE)
+ .area GSINIT1 (CODE)
+ .area GSINIT2 (CODE)
+ .area GSINIT3 (CODE)
+ .area GSINIT4 (CODE)
+ .area GSINIT5 (CODE)
+ .area GSINIT (CODE)
+ .area GSFINAL (CODE)
+ .area CSEG (CODE)
+;--------------------------------------------------------
+; interrupt vector
+;--------------------------------------------------------
+ .area HOME (CODE)
+__interrupt_vect:
+ ljmp __sdcc_gsinit_startup
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME (CODE)
+ .area GSINIT (CODE)
+ .area GSFINAL (CODE)
+ .area GSINIT (CODE)
+ .globl __sdcc_gsinit_startup
+ .globl __sdcc_program_startup
+ .globl __start__stack
+ .globl __mcs51_genXINIT
+ .globl __mcs51_genXRAMCLEAR
+ .globl __mcs51_genRAMCLEAR
+ .area GSFINAL (CODE)
+ ljmp __sdcc_program_startup
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME (CODE)
+ .area HOME (CODE)
+__sdcc_program_startup:
+ lcall _main
+; return from main will lock up
+ sjmp .
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CSEG (CODE)
+;------------------------------------------------------------
+;Allocation info for local variables in function 'main'
+;------------------------------------------------------------
+;i Allocated to registers r2 r3
+;------------------------------------------------------------
+ G$main$0$0 ==.
+ C$ledmatrix.c$27$0$0 ==.
+; ledmatrix.c:27: int main()
+; -----------------------------------------
+; function main
+; -----------------------------------------
+_main:
+ ar2 = 0x02
+ ar3 = 0x03
+ ar4 = 0x04
+ ar5 = 0x05
+ ar6 = 0x06
+ ar7 = 0x07
+ ar0 = 0x00
+ ar1 = 0x01
+ C$ledmatrix.c$30$1$1 ==.
+; ledmatrix.c:30: while(1) {
+00102$:
+ C$ledmatrix.c$31$2$2 ==.
+; ledmatrix.c:31: for(i=0; i<8; i++) {
+ mov r2,#0x00
+ mov r3,#0x00
+00104$:
+ clr c
+ mov a,r2
+ subb a,#0x08
+ mov a,r3
+ xrl a,#0x80
+ subb a,#0x80
+ jnc 00102$
+ C$ledmatrix.c$32$3$3 ==.
+; ledmatrix.c:32: P1 = 0xff;
+ mov _P1,#0xFF
+ C$ledmatrix.c$33$3$3 ==.
+; ledmatrix.c:33: P0 = image[i];
+ mov a,r2
+ add a,#_image
+ mov dpl,a
+ mov a,r3
+ addc a,#(_image >> 8)
+ mov dph,a
+ clr a
+ movc a,@a+dptr
+ mov _P0,a
+ C$ledmatrix.c$34$3$3 ==.
+; ledmatrix.c:34: P1 = (1 << i) ^ 255;
+ mov b,r2
+ inc b
+ mov r4,#0x01
+ mov r5,#0x00
+ sjmp 00115$
+00114$:
+ mov a,r4
+ add a,r4
+ mov r4,a
+ mov a,r5
+ rlc a
+ mov r5,a
+00115$:
+ djnz b,00114$
+ mov a,#0xFF
+ xrl a,r4
+ mov _P1,a
+ C$ledmatrix.c$31$2$2 ==.
+; ledmatrix.c:31: for(i=0; i<8; i++) {
+ inc r2
+ cjne r2,#0x00,00104$
+ inc r3
+ C$ledmatrix.c$37$1$1 ==.
+ XG$main$0$0 ==.
+ sjmp 00104$
+ .area CSEG (CODE)
+ .area CONST (CODE)
+Fledmatrix$image$0$0 == .
+_image:
+ .db #0xB1
+ .db #0x9D
+ .db #0xBD
+ .db #0xB1
+ .db #0xB7
+ .db #0xB7
+ .db #0x11
+ .db #0xFF
+ .area XINIT (CODE)
+ .area CABS (ABS,CODE)
diff --git a/demo/ledmatrix.c b/demo/ledmatrix.c
new file mode 100644
index 0000000..aa1dea9
--- /dev/null
+++ b/demo/ledmatrix.c
@@ -0,0 +1,43 @@
+/**
+ * Demonstration code for <b>MCU 8051 IDE</b>
+ *
+ * Virtual HW and C language
+ * Requires MCU AT89C51 or similar ( [Project] -> [Edit project] -> [Select MCU] )
+ * @file demo_c_0.c
+ */
+
+// Create virtual LED matrix and load configuration file "ledmatrix.vhc"
+// [Virtual HW] -> [LED Matrix]
+
+// To compile the code press F11 (This code is precompiled)
+// To start simulator press F2
+// To simulate the program press F6 (animate) or F7 (step) or F8 (step over) or F9 (run)
+
+// To save some time you can use program hibernation function
+// [Simulator] -> [Resume hibernated program] and select "ledmatrix.m5hib"
+
+
+#include <at89x51.h>
+
+static const char image[] = {
+ 0xb1, 0x9d, 0xbd, 0xb1,
+ 0xb7, 0xb7, 0x11, 0xff
+};
+
+int main()
+{
+ int i;
+ while(1) {
+ for(i=0; i<8; i++) {
+ P1 = 0xff;
+ P0 = image[i];
+ P1 = (1 << i) ^ 255;
+ }
+ }
+}
+
+// Note: Sometimes people wonder how it is possible to
+// write a program for MCU in C language. So please
+// study this code or SDCC manual or another documents.
+// And please do not ask me silly questions ... :)
+// By the way my email is <martin.osmera@gmail.com>
diff --git a/demo/ledmatrix.cdb b/demo/ledmatrix.cdb
new file mode 100644
index 0000000..a049b01
--- /dev/null
+++ b/demo/ledmatrix.cdb
@@ -0,0 +1,251 @@
+M:ledmatrix
+F:G$main$0$0({2}DF,SI:S),C,0,0,0,0,0
+S:Lmain$i$1$1({2}SI:S),R,0,0,[r2,r3]
+S:G$P0$0$0({1}SC:U),I,0,0
+S:G$SP$0$0({1}SC:U),I,0,0
+S:G$DPL$0$0({1}SC:U),I,0,0
+S:G$DPH$0$0({1}SC:U),I,0,0
+S:G$PCON$0$0({1}SC:U),I,0,0
+S:G$TCON$0$0({1}SC:U),I,0,0
+S:G$TMOD$0$0({1}SC:U),I,0,0
+S:G$TL0$0$0({1}SC:U),I,0,0
+S:G$TL1$0$0({1}SC:U),I,0,0
+S:G$TH0$0$0({1}SC:U),I,0,0
+S:G$TH1$0$0({1}SC:U),I,0,0
+S:G$P1$0$0({1}SC:U),I,0,0
+S:G$SCON$0$0({1}SC:U),I,0,0
+S:G$SBUF$0$0({1}SC:U),I,0,0
+S:G$P2$0$0({1}SC:U),I,0,0
+S:G$IE$0$0({1}SC:U),I,0,0
+S:G$P3$0$0({1}SC:U),I,0,0
+S:G$IP$0$0({1}SC:U),I,0,0
+S:G$PSW$0$0({1}SC:U),I,0,0
+S:G$ACC$0$0({1}SC:U),I,0,0
+S:G$A$0$0({1}SC:U),I,0,0
+S:G$B$0$0({1}SC:U),I,0,0
+S:G$P0_0$0$0({1}SX:U),J,0,0
+S:G$P0_1$0$0({1}SX:U),J,0,0
+S:G$P0_2$0$0({1}SX:U),J,0,0
+S:G$P0_3$0$0({1}SX:U),J,0,0
+S:G$P0_4$0$0({1}SX:U),J,0,0
+S:G$P0_5$0$0({1}SX:U),J,0,0
+S:G$P0_6$0$0({1}SX:U),J,0,0
+S:G$P0_7$0$0({1}SX:U),J,0,0
+S:G$IT0$0$0({1}SX:U),J,0,0
+S:G$IE0$0$0({1}SX:U),J,0,0
+S:G$IT1$0$0({1}SX:U),J,0,0
+S:G$IE1$0$0({1}SX:U),J,0,0
+S:G$TR0$0$0({1}SX:U),J,0,0
+S:G$TF0$0$0({1}SX:U),J,0,0
+S:G$TR1$0$0({1}SX:U),J,0,0
+S:G$TF1$0$0({1}SX:U),J,0,0
+S:G$P1_0$0$0({1}SX:U),J,0,0
+S:G$P1_1$0$0({1}SX:U),J,0,0
+S:G$P1_2$0$0({1}SX:U),J,0,0
+S:G$P1_3$0$0({1}SX:U),J,0,0
+S:G$P1_4$0$0({1}SX:U),J,0,0
+S:G$P1_5$0$0({1}SX:U),J,0,0
+S:G$P1_6$0$0({1}SX:U),J,0,0
+S:G$P1_7$0$0({1}SX:U),J,0,0
+S:G$RI$0$0({1}SX:U),J,0,0
+S:G$TI$0$0({1}SX:U),J,0,0
+S:G$RB8$0$0({1}SX:U),J,0,0
+S:G$TB8$0$0({1}SX:U),J,0,0
+S:G$REN$0$0({1}SX:U),J,0,0
+S:G$SM2$0$0({1}SX:U),J,0,0
+S:G$SM1$0$0({1}SX:U),J,0,0
+S:G$SM0$0$0({1}SX:U),J,0,0
+S:G$P2_0$0$0({1}SX:U),J,0,0
+S:G$P2_1$0$0({1}SX:U),J,0,0
+S:G$P2_2$0$0({1}SX:U),J,0,0
+S:G$P2_3$0$0({1}SX:U),J,0,0
+S:G$P2_4$0$0({1}SX:U),J,0,0
+S:G$P2_5$0$0({1}SX:U),J,0,0
+S:G$P2_6$0$0({1}SX:U),J,0,0
+S:G$P2_7$0$0({1}SX:U),J,0,0
+S:G$EX0$0$0({1}SX:U),J,0,0
+S:G$ET0$0$0({1}SX:U),J,0,0
+S:G$EX1$0$0({1}SX:U),J,0,0
+S:G$ET1$0$0({1}SX:U),J,0,0
+S:G$ES$0$0({1}SX:U),J,0,0
+S:G$EA$0$0({1}SX:U),J,0,0
+S:G$P3_0$0$0({1}SX:U),J,0,0
+S:G$P3_1$0$0({1}SX:U),J,0,0
+S:G$P3_2$0$0({1}SX:U),J,0,0
+S:G$P3_3$0$0({1}SX:U),J,0,0
+S:G$P3_4$0$0({1}SX:U),J,0,0
+S:G$P3_5$0$0({1}SX:U),J,0,0
+S:G$P3_6$0$0({1}SX:U),J,0,0
+S:G$P3_7$0$0({1}SX:U),J,0,0
+S:G$RXD$0$0({1}SX:U),J,0,0
+S:G$TXD$0$0({1}SX:U),J,0,0
+S:G$INT0$0$0({1}SX:U),J,0,0
+S:G$INT1$0$0({1}SX:U),J,0,0
+S:G$T0$0$0({1}SX:U),J,0,0
+S:G$T1$0$0({1}SX:U),J,0,0
+S:G$WR$0$0({1}SX:U),J,0,0
+S:G$RD$0$0({1}SX:U),J,0,0
+S:G$PX0$0$0({1}SX:U),J,0,0
+S:G$PT0$0$0({1}SX:U),J,0,0
+S:G$PX1$0$0({1}SX:U),J,0,0
+S:G$PT1$0$0({1}SX:U),J,0,0
+S:G$PS$0$0({1}SX:U),J,0,0
+S:G$P$0$0({1}SX:U),J,0,0
+S:G$FL$0$0({1}SX:U),J,0,0
+S:G$OV$0$0({1}SX:U),J,0,0
+S:G$RS0$0$0({1}SX:U),J,0,0
+S:G$RS1$0$0({1}SX:U),J,0,0
+S:G$F0$0$0({1}SX:U),J,0,0
+S:G$AC$0$0({1}SX:U),J,0,0
+S:G$CY$0$0({1}SX:U),J,0,0
+S:G$main$0$0({2}DF,SI:S),C,0,0
+S:Fledmatrix$image$0$0({8}DA8,SC:S),D,0,0
+L:G$P0$0$0:80
+L:G$P0_0$0$0:80
+L:G$P0_1$0$0:81
+L:G$SP$0$0:81
+L:G$DPL$0$0:82
+L:G$P0_2$0$0:82
+L:G$DPH$0$0:83
+L:G$P0_3$0$0:83
+L:G$P0_4$0$0:84
+L:G$P0_5$0$0:85
+L:G$P0_6$0$0:86
+L:G$P0_7$0$0:87
+L:G$PCON$0$0:87
+L:G$IT0$0$0:88
+L:G$TCON$0$0:88
+L:G$IE0$0$0:89
+L:G$TMOD$0$0:89
+L:G$IT1$0$0:8A
+L:G$TL0$0$0:8A
+L:G$IE1$0$0:8B
+L:G$TL1$0$0:8B
+L:G$TH0$0$0:8C
+L:G$TR0$0$0:8C
+L:G$TF0$0$0:8D
+L:G$TH1$0$0:8D
+L:G$TR1$0$0:8E
+L:G$TF1$0$0:8F
+L:G$P1$0$0:90
+L:G$P1_0$0$0:90
+L:G$P1_1$0$0:91
+L:G$P1_2$0$0:92
+L:G$P1_3$0$0:93
+L:G$P1_4$0$0:94
+L:G$P1_5$0$0:95
+L:G$P1_6$0$0:96
+L:G$P1_7$0$0:97
+L:G$RI$0$0:98
+L:G$SCON$0$0:98
+L:G$SBUF$0$0:99
+L:G$TI$0$0:99
+L:G$RB8$0$0:9A
+L:G$TB8$0$0:9B
+L:G$REN$0$0:9C
+L:G$SM2$0$0:9D
+L:G$SM1$0$0:9E
+L:G$SM0$0$0:9F
+L:G$P2$0$0:A0
+L:G$P2_0$0$0:A0
+L:G$P2_1$0$0:A1
+L:G$P2_2$0$0:A2
+L:G$P2_3$0$0:A3
+L:G$P2_4$0$0:A4
+L:G$P2_5$0$0:A5
+L:G$P2_6$0$0:A6
+L:G$P2_7$0$0:A7
+L:G$EX0$0$0:A8
+L:G$IE$0$0:A8
+L:G$ET0$0$0:A9
+L:G$EX1$0$0:AA
+L:G$ET1$0$0:AB
+L:G$ES$0$0:AC
+L:G$EA$0$0:AF
+L:G$P3$0$0:B0
+L:G$P3_0$0$0:B0
+L:G$RXD$0$0:B0
+L:G$P3_1$0$0:B1
+L:G$TXD$0$0:B1
+L:G$INT0$0$0:B2
+L:G$P3_2$0$0:B2
+L:G$INT1$0$0:B3
+L:G$P3_3$0$0:B3
+L:G$P3_4$0$0:B4
+L:G$T0$0$0:B4
+L:G$P3_5$0$0:B5
+L:G$T1$0$0:B5
+L:G$P3_6$0$0:B6
+L:G$WR$0$0:B6
+L:G$P3_7$0$0:B7
+L:G$RD$0$0:B7
+L:G$IP$0$0:B8
+L:G$PX0$0$0:B8
+L:G$PT0$0$0:B9
+L:G$PX1$0$0:BA
+L:G$PT1$0$0:BB
+L:G$PS$0$0:BC
+L:G$P$0$0:D0
+L:G$PSW$0$0:D0
+L:G$FL$0$0:D1
+L:G$OV$0$0:D2
+L:G$RS0$0$0:D3
+L:G$RS1$0$0:D4
+L:G$F0$0$0:D5
+L:G$AC$0$0:D6
+L:G$CY$0$0:D7
+L:G$A$0$0:E0
+L:G$ACC$0$0:E0
+L:G$B$0$0:F0
+L:A$ledmatrix$376:0
+L:A$ledmatrix$398:3
+L:A$ledmatrix$400:6
+L:A$ledmatrix$391:61
+L:A$ledmatrix$430:64
+L:C$ledmatrix.c$27$0$0:64
+L:C$ledmatrix.c$30$1$1:64
+L:G$main$0$0:64
+L:A$ledmatrix$431:66
+L:A$ledmatrix$433:68
+L:A$ledmatrix$434:69
+L:A$ledmatrix$435:6A
+L:A$ledmatrix$436:6C
+L:A$ledmatrix$437:6D
+L:A$ledmatrix$438:6F
+L:A$ledmatrix$439:71
+L:A$ledmatrix$442:73
+L:C$ledmatrix.c$32$3$3:73
+L:A$ledmatrix$445:76
+L:C$ledmatrix.c$33$3$3:76
+L:A$ledmatrix$446:77
+L:A$ledmatrix$447:79
+L:A$ledmatrix$448:7B
+L:A$ledmatrix$449:7C
+L:A$ledmatrix$450:7E
+L:A$ledmatrix$451:80
+L:A$ledmatrix$452:81
+L:A$ledmatrix$453:82
+L:A$ledmatrix$456:84
+L:C$ledmatrix.c$34$3$3:84
+L:A$ledmatrix$457:86
+L:A$ledmatrix$458:88
+L:A$ledmatrix$459:8A
+L:A$ledmatrix$460:8C
+L:A$ledmatrix$462:8E
+L:A$ledmatrix$463:8F
+L:A$ledmatrix$464:90
+L:A$ledmatrix$465:91
+L:A$ledmatrix$466:92
+L:A$ledmatrix$467:93
+L:A$ledmatrix$469:94
+L:A$ledmatrix$470:97
+L:A$ledmatrix$471:99
+L:A$ledmatrix$472:9A
+L:A$ledmatrix$475:9C
+L:C$ledmatrix.c$31$2$2:9C
+L:A$ledmatrix$476:9D
+L:A$ledmatrix$477:A0
+L:A$ledmatrix$480:A1
+L:C$ledmatrix.c$37$1$1:A1
+L:XG$main$0$0:A1
+L:Fledmatrix$image$0$0:A7
diff --git a/demo/ledmatrix.hashes b/demo/ledmatrix.hashes
new file mode 100644
index 0000000..895b5e6
--- /dev/null
+++ b/demo/ledmatrix.hashes
@@ -0,0 +1 @@
+517133F895352F3918C3E1250EA990A5 "ledmatrix.c"
diff --git a/demo/ledmatrix.hex b/demo/ledmatrix.hex
new file mode 100644
index 0000000..339b4c0
--- /dev/null
+++ b/demo/ledmatrix.hex
@@ -0,0 +1,26 @@
+:03000000020008F3
+:0300610002000397
+:0500030012006480FE04
+:040064007A007B00A3
+:0E006800C3EA9408EB6480948050F17590FF19
+:0A007600EA24A7F582EB3400F583BD
+:0E008000E493F5808AF005F07C017D00800697
+:06008E00EC2CFCED33FD3B
+:0E009400D5F0F774FF6CF5900ABA00C80B8027
+:0100A200C598
+:0800A700B19DBDB1B7B711FF17
+:06003700E478FFF6D8FD9D
+:080015007900E94400601B7A48
+:05001D00009000AF7827
+:030022000075A0C6
+:0A00250000E493F2A308B8000205FE
+:08002F00A0D9F4DAF275A0FF7C
+:08003D007800E84400600A7934
+:030045000075A0A3
+:0600480000E4F309D8FCFE
+:08004E007800E84400600C7921
+:0B00560000900000E4F0A3D8FCD9FAF1
+:03000800758107F8
+:0A000B001200A3E582600302000367
+:0400A3007582002240
+:00000001FF
diff --git a/demo/ledmatrix.ihx b/demo/ledmatrix.ihx
new file mode 100644
index 0000000..339b4c0
--- /dev/null
+++ b/demo/ledmatrix.ihx
@@ -0,0 +1,26 @@
+:03000000020008F3
+:0300610002000397
+:0500030012006480FE04
+:040064007A007B00A3
+:0E006800C3EA9408EB6480948050F17590FF19
+:0A007600EA24A7F582EB3400F583BD
+:0E008000E493F5808AF005F07C017D00800697
+:06008E00EC2CFCED33FD3B
+:0E009400D5F0F774FF6CF5900ABA00C80B8027
+:0100A200C598
+:0800A700B19DBDB1B7B711FF17
+:06003700E478FFF6D8FD9D
+:080015007900E94400601B7A48
+:05001D00009000AF7827
+:030022000075A0C6
+:0A00250000E493F2A308B8000205FE
+:08002F00A0D9F4DAF275A0FF7C
+:08003D007800E84400600A7934
+:030045000075A0A3
+:0600480000E4F309D8FCFE
+:08004E007800E84400600C7921
+:0B00560000900000E4F0A3D8FCD9FAF1
+:03000800758107F8
+:0A000B001200A3E582600302000367
+:0400A3007582002240
+:00000001FF
diff --git a/demo/ledmatrix.lnk b/demo/ledmatrix.lnk
new file mode 100644
index 0000000..b4c7fe4
--- /dev/null
+++ b/demo/ledmatrix.lnk
@@ -0,0 +1,19 @@
+-myuxi
+-Y
+-a 0x0100
+-v 0x0000
+-w 0x2000
+-z
+-b HOME = 0x0000
+-b ISEG = 0x0000
+-b BSEG = 0x0000
+-k /usr/libexec/sdcc/../share/sdcc/lib/small
+-k /usr/share/sdcc/lib/small
+-l mcs51
+-l libsdcc
+-l libint
+-l liblong
+-l libfloat
+ledmatrix.rel
+
+-e
diff --git a/demo/ledmatrix.lst b/demo/ledmatrix.lst
new file mode 100644
index 0000000..43d46a4
--- /dev/null
+++ b/demo/ledmatrix.lst
@@ -0,0 +1,494 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+ 4 ; This file was generated Mon Oct 19 23:11:07 2009
+ 5 ;--------------------------------------------------------
+ 6 .module ledmatrix
+ 7 .optsdcc -mmcs51 --model-small
+ 8
+ 9 ;--------------------------------------------------------
+ 10 ; Public variables in this module
+ 11 ;--------------------------------------------------------
+ 12 .globl _main
+ 13 .globl _CY
+ 14 .globl _AC
+ 15 .globl _F0
+ 16 .globl _RS1
+ 17 .globl _RS0
+ 18 .globl _OV
+ 19 .globl _FL
+ 20 .globl _P
+ 21 .globl _PS
+ 22 .globl _PT1
+ 23 .globl _PX1
+ 24 .globl _PT0
+ 25 .globl _PX0
+ 26 .globl _RD
+ 27 .globl _WR
+ 28 .globl _T1
+ 29 .globl _T0
+ 30 .globl _INT1
+ 31 .globl _INT0
+ 32 .globl _TXD
+ 33 .globl _RXD
+ 34 .globl _P3_7
+ 35 .globl _P3_6
+ 36 .globl _P3_5
+ 37 .globl _P3_4
+ 38 .globl _P3_3
+ 39 .globl _P3_2
+ 40 .globl _P3_1
+ 41 .globl _P3_0
+ 42 .globl _EA
+ 43 .globl _ES
+ 44 .globl _ET1
+ 45 .globl _EX1
+ 46 .globl _ET0
+ 47 .globl _EX0
+ 48 .globl _P2_7
+ 49 .globl _P2_6
+ 50 .globl _P2_5
+ 51 .globl _P2_4
+ 52 .globl _P2_3
+ 53 .globl _P2_2
+ 54 .globl _P2_1
+ 55 .globl _P2_0
+ 56 .globl _SM0
+ 57 .globl _SM1
+ 58 .globl _SM2
+ 59 .globl _REN
+ 60 .globl _TB8
+ 61 .globl _RB8
+ 62 .globl _TI
+ 63 .globl _RI
+ 64 .globl _P1_7
+ 65 .globl _P1_6
+ 66 .globl _P1_5
+ 67 .globl _P1_4
+ 68 .globl _P1_3
+ 69 .globl _P1_2
+ 70 .globl _P1_1
+ 71 .globl _P1_0
+ 72 .globl _TF1
+ 73 .globl _TR1
+ 74 .globl _TF0
+ 75 .globl _TR0
+ 76 .globl _IE1
+ 77 .globl _IT1
+ 78 .globl _IE0
+ 79 .globl _IT0
+ 80 .globl _P0_7
+ 81 .globl _P0_6
+ 82 .globl _P0_5
+ 83 .globl _P0_4
+ 84 .globl _P0_3
+ 85 .globl _P0_2
+ 86 .globl _P0_1
+ 87 .globl _P0_0
+ 88 .globl _B
+ 89 .globl _A
+ 90 .globl _ACC
+ 91 .globl _PSW
+ 92 .globl _IP
+ 93 .globl _P3
+ 94 .globl _IE
+ 95 .globl _P2
+ 96 .globl _SBUF
+ 97 .globl _SCON
+ 98 .globl _P1
+ 99 .globl _TH1
+ 100 .globl _TH0
+ 101 .globl _TL1
+ 102 .globl _TL0
+ 103 .globl _TMOD
+ 104 .globl _TCON
+ 105 .globl _PCON
+ 106 .globl _DPH
+ 107 .globl _DPL
+ 108 .globl _SP
+ 109 .globl _P0
+ 110 ;--------------------------------------------------------
+ 111 ; special function registers
+ 112 ;--------------------------------------------------------
+ 113 .area RSEG (DATA)
+ 0080 114 G$P0$0$0 == 0x0080
+ 0080 115 _P0 = 0x0080
+ 0081 116 G$SP$0$0 == 0x0081
+ 0081 117 _SP = 0x0081
+ 0082 118 G$DPL$0$0 == 0x0082
+ 0082 119 _DPL = 0x0082
+ 0083 120 G$DPH$0$0 == 0x0083
+ 0083 121 _DPH = 0x0083
+ 0087 122 G$PCON$0$0 == 0x0087
+ 0087 123 _PCON = 0x0087
+ 0088 124 G$TCON$0$0 == 0x0088
+ 0088 125 _TCON = 0x0088
+ 0089 126 G$TMOD$0$0 == 0x0089
+ 0089 127 _TMOD = 0x0089
+ 008A 128 G$TL0$0$0 == 0x008a
+ 008A 129 _TL0 = 0x008a
+ 008B 130 G$TL1$0$0 == 0x008b
+ 008B 131 _TL1 = 0x008b
+ 008C 132 G$TH0$0$0 == 0x008c
+ 008C 133 _TH0 = 0x008c
+ 008D 134 G$TH1$0$0 == 0x008d
+ 008D 135 _TH1 = 0x008d
+ 0090 136 G$P1$0$0 == 0x0090
+ 0090 137 _P1 = 0x0090
+ 0098 138 G$SCON$0$0 == 0x0098
+ 0098 139 _SCON = 0x0098
+ 0099 140 G$SBUF$0$0 == 0x0099
+ 0099 141 _SBUF = 0x0099
+ 00A0 142 G$P2$0$0 == 0x00a0
+ 00A0 143 _P2 = 0x00a0
+ 00A8 144 G$IE$0$0 == 0x00a8
+ 00A8 145 _IE = 0x00a8
+ 00B0 146 G$P3$0$0 == 0x00b0
+ 00B0 147 _P3 = 0x00b0
+ 00B8 148 G$IP$0$0 == 0x00b8
+ 00B8 149 _IP = 0x00b8
+ 00D0 150 G$PSW$0$0 == 0x00d0
+ 00D0 151 _PSW = 0x00d0
+ 00E0 152 G$ACC$0$0 == 0x00e0
+ 00E0 153 _ACC = 0x00e0
+ 00E0 154 G$A$0$0 == 0x00e0
+ 00E0 155 _A = 0x00e0
+ 00F0 156 G$B$0$0 == 0x00f0
+ 00F0 157 _B = 0x00f0
+ 158 ;--------------------------------------------------------
+ 159 ; special function bits
+ 160 ;--------------------------------------------------------
+ 161 .area RSEG (DATA)
+ 0080 162 G$P0_0$0$0 == 0x0080
+ 0080 163 _P0_0 = 0x0080
+ 0081 164 G$P0_1$0$0 == 0x0081
+ 0081 165 _P0_1 = 0x0081
+ 0082 166 G$P0_2$0$0 == 0x0082
+ 0082 167 _P0_2 = 0x0082
+ 0083 168 G$P0_3$0$0 == 0x0083
+ 0083 169 _P0_3 = 0x0083
+ 0084 170 G$P0_4$0$0 == 0x0084
+ 0084 171 _P0_4 = 0x0084
+ 0085 172 G$P0_5$0$0 == 0x0085
+ 0085 173 _P0_5 = 0x0085
+ 0086 174 G$P0_6$0$0 == 0x0086
+ 0086 175 _P0_6 = 0x0086
+ 0087 176 G$P0_7$0$0 == 0x0087
+ 0087 177 _P0_7 = 0x0087
+ 0088 178 G$IT0$0$0 == 0x0088
+ 0088 179 _IT0 = 0x0088
+ 0089 180 G$IE0$0$0 == 0x0089
+ 0089 181 _IE0 = 0x0089
+ 008A 182 G$IT1$0$0 == 0x008a
+ 008A 183 _IT1 = 0x008a
+ 008B 184 G$IE1$0$0 == 0x008b
+ 008B 185 _IE1 = 0x008b
+ 008C 186 G$TR0$0$0 == 0x008c
+ 008C 187 _TR0 = 0x008c
+ 008D 188 G$TF0$0$0 == 0x008d
+ 008D 189 _TF0 = 0x008d
+ 008E 190 G$TR1$0$0 == 0x008e
+ 008E 191 _TR1 = 0x008e
+ 008F 192 G$TF1$0$0 == 0x008f
+ 008F 193 _TF1 = 0x008f
+ 0090 194 G$P1_0$0$0 == 0x0090
+ 0090 195 _P1_0 = 0x0090
+ 0091 196 G$P1_1$0$0 == 0x0091
+ 0091 197 _P1_1 = 0x0091
+ 0092 198 G$P1_2$0$0 == 0x0092
+ 0092 199 _P1_2 = 0x0092
+ 0093 200 G$P1_3$0$0 == 0x0093
+ 0093 201 _P1_3 = 0x0093
+ 0094 202 G$P1_4$0$0 == 0x0094
+ 0094 203 _P1_4 = 0x0094
+ 0095 204 G$P1_5$0$0 == 0x0095
+ 0095 205 _P1_5 = 0x0095
+ 0096 206 G$P1_6$0$0 == 0x0096
+ 0096 207 _P1_6 = 0x0096
+ 0097 208 G$P1_7$0$0 == 0x0097
+ 0097 209 _P1_7 = 0x0097
+ 0098 210 G$RI$0$0 == 0x0098
+ 0098 211 _RI = 0x0098
+ 0099 212 G$TI$0$0 == 0x0099
+ 0099 213 _TI = 0x0099
+ 009A 214 G$RB8$0$0 == 0x009a
+ 009A 215 _RB8 = 0x009a
+ 009B 216 G$TB8$0$0 == 0x009b
+ 009B 217 _TB8 = 0x009b
+ 009C 218 G$REN$0$0 == 0x009c
+ 009C 219 _REN = 0x009c
+ 009D 220 G$SM2$0$0 == 0x009d
+ 009D 221 _SM2 = 0x009d
+ 009E 222 G$SM1$0$0 == 0x009e
+ 009E 223 _SM1 = 0x009e
+ 009F 224 G$SM0$0$0 == 0x009f
+ 009F 225 _SM0 = 0x009f
+ 00A0 226 G$P2_0$0$0 == 0x00a0
+ 00A0 227 _P2_0 = 0x00a0
+ 00A1 228 G$P2_1$0$0 == 0x00a1
+ 00A1 229 _P2_1 = 0x00a1
+ 00A2 230 G$P2_2$0$0 == 0x00a2
+ 00A2 231 _P2_2 = 0x00a2
+ 00A3 232 G$P2_3$0$0 == 0x00a3
+ 00A3 233 _P2_3 = 0x00a3
+ 00A4 234 G$P2_4$0$0 == 0x00a4
+ 00A4 235 _P2_4 = 0x00a4
+ 00A5 236 G$P2_5$0$0 == 0x00a5
+ 00A5 237 _P2_5 = 0x00a5
+ 00A6 238 G$P2_6$0$0 == 0x00a6
+ 00A6 239 _P2_6 = 0x00a6
+ 00A7 240 G$P2_7$0$0 == 0x00a7
+ 00A7 241 _P2_7 = 0x00a7
+ 00A8 242 G$EX0$0$0 == 0x00a8
+ 00A8 243 _EX0 = 0x00a8
+ 00A9 244 G$ET0$0$0 == 0x00a9
+ 00A9 245 _ET0 = 0x00a9
+ 00AA 246 G$EX1$0$0 == 0x00aa
+ 00AA 247 _EX1 = 0x00aa
+ 00AB 248 G$ET1$0$0 == 0x00ab
+ 00AB 249 _ET1 = 0x00ab
+ 00AC 250 G$ES$0$0 == 0x00ac
+ 00AC 251 _ES = 0x00ac
+ 00AF 252 G$EA$0$0 == 0x00af
+ 00AF 253 _EA = 0x00af
+ 00B0 254 G$P3_0$0$0 == 0x00b0
+ 00B0 255 _P3_0 = 0x00b0
+ 00B1 256 G$P3_1$0$0 == 0x00b1
+ 00B1 257 _P3_1 = 0x00b1
+ 00B2 258 G$P3_2$0$0 == 0x00b2
+ 00B2 259 _P3_2 = 0x00b2
+ 00B3 260 G$P3_3$0$0 == 0x00b3
+ 00B3 261 _P3_3 = 0x00b3
+ 00B4 262 G$P3_4$0$0 == 0x00b4
+ 00B4 263 _P3_4 = 0x00b4
+ 00B5 264 G$P3_5$0$0 == 0x00b5
+ 00B5 265 _P3_5 = 0x00b5
+ 00B6 266 G$P3_6$0$0 == 0x00b6
+ 00B6 267 _P3_6 = 0x00b6
+ 00B7 268 G$P3_7$0$0 == 0x00b7
+ 00B7 269 _P3_7 = 0x00b7
+ 00B0 270 G$RXD$0$0 == 0x00b0
+ 00B0 271 _RXD = 0x00b0
+ 00B1 272 G$TXD$0$0 == 0x00b1
+ 00B1 273 _TXD = 0x00b1
+ 00B2 274 G$INT0$0$0 == 0x00b2
+ 00B2 275 _INT0 = 0x00b2
+ 00B3 276 G$INT1$0$0 == 0x00b3
+ 00B3 277 _INT1 = 0x00b3
+ 00B4 278 G$T0$0$0 == 0x00b4
+ 00B4 279 _T0 = 0x00b4
+ 00B5 280 G$T1$0$0 == 0x00b5
+ 00B5 281 _T1 = 0x00b5
+ 00B6 282 G$WR$0$0 == 0x00b6
+ 00B6 283 _WR = 0x00b6
+ 00B7 284 G$RD$0$0 == 0x00b7
+ 00B7 285 _RD = 0x00b7
+ 00B8 286 G$PX0$0$0 == 0x00b8
+ 00B8 287 _PX0 = 0x00b8
+ 00B9 288 G$PT0$0$0 == 0x00b9
+ 00B9 289 _PT0 = 0x00b9
+ 00BA 290 G$PX1$0$0 == 0x00ba
+ 00BA 291 _PX1 = 0x00ba
+ 00BB 292 G$PT1$0$0 == 0x00bb
+ 00BB 293 _PT1 = 0x00bb
+ 00BC 294 G$PS$0$0 == 0x00bc
+ 00BC 295 _PS = 0x00bc
+ 00D0 296 G$P$0$0 == 0x00d0
+ 00D0 297 _P = 0x00d0
+ 00D1 298 G$FL$0$0 == 0x00d1
+ 00D1 299 _FL = 0x00d1
+ 00D2 300 G$OV$0$0 == 0x00d2
+ 00D2 301 _OV = 0x00d2
+ 00D3 302 G$RS0$0$0 == 0x00d3
+ 00D3 303 _RS0 = 0x00d3
+ 00D4 304 G$RS1$0$0 == 0x00d4
+ 00D4 305 _RS1 = 0x00d4
+ 00D5 306 G$F0$0$0 == 0x00d5
+ 00D5 307 _F0 = 0x00d5
+ 00D6 308 G$AC$0$0 == 0x00d6
+ 00D6 309 _AC = 0x00d6
+ 00D7 310 G$CY$0$0 == 0x00d7
+ 00D7 311 _CY = 0x00d7
+ 312 ;--------------------------------------------------------
+ 313 ; overlayable register banks
+ 314 ;--------------------------------------------------------
+ 315 .area REG_BANK_0 (REL,OVR,DATA)
+ 0000 316 .ds 8
+ 317 ;--------------------------------------------------------
+ 318 ; internal ram data
+ 319 ;--------------------------------------------------------
+ 320 .area DSEG (DATA)
+ 321 ;--------------------------------------------------------
+ 322 ; overlayable items in internal ram
+ 323 ;--------------------------------------------------------
+ 324 .area OSEG (OVR,DATA)
+ 325 ;--------------------------------------------------------
+ 326 ; Stack segment in internal ram
+ 327 ;--------------------------------------------------------
+ 328 .area SSEG (DATA)
+ 0000 329 __start__stack:
+ 0000 330 .ds 1
+ 331
+ 332 ;--------------------------------------------------------
+ 333 ; indirectly addressable internal ram data
+ 334 ;--------------------------------------------------------
+ 335 .area ISEG (DATA)
+ 336 ;--------------------------------------------------------
+ 337 ; absolute internal ram data
+ 338 ;--------------------------------------------------------
+ 339 .area IABS (ABS,DATA)
+ 340 .area IABS (ABS,DATA)
+ 341 ;--------------------------------------------------------
+ 342 ; bit data
+ 343 ;--------------------------------------------------------
+ 344 .area BSEG (BIT)
+ 345 ;--------------------------------------------------------
+ 346 ; paged external ram data
+ 347 ;--------------------------------------------------------
+ 348 .area PSEG (PAG,XDATA)
+ 349 ;--------------------------------------------------------
+ 350 ; external ram data
+ 351 ;--------------------------------------------------------
+ 352 .area XSEG (XDATA)
+ 353 ;--------------------------------------------------------
+ 354 ; absolute external ram data
+ 355 ;--------------------------------------------------------
+ 356 .area XABS (ABS,XDATA)
+ 357 ;--------------------------------------------------------
+ 358 ; external initialized ram data
+ 359 ;--------------------------------------------------------
+ 360 .area XISEG (XDATA)
+ 361 .area HOME (CODE)
+ 362 .area GSINIT0 (CODE)
+ 363 .area GSINIT1 (CODE)
+ 364 .area GSINIT2 (CODE)
+ 365 .area GSINIT3 (CODE)
+ 366 .area GSINIT4 (CODE)
+ 367 .area GSINIT5 (CODE)
+ 368 .area GSINIT (CODE)
+ 369 .area GSFINAL (CODE)
+ 370 .area CSEG (CODE)
+ 371 ;--------------------------------------------------------
+ 372 ; interrupt vector
+ 373 ;--------------------------------------------------------
+ 374 .area HOME (CODE)
+ 0000 375 __interrupt_vect:
+ 0000 02s00r00 376 ljmp __sdcc_gsinit_startup
+ 377 ;--------------------------------------------------------
+ 378 ; global & static initialisations
+ 379 ;--------------------------------------------------------
+ 380 .area HOME (CODE)
+ 381 .area GSINIT (CODE)
+ 382 .area GSFINAL (CODE)
+ 383 .area GSINIT (CODE)
+ 384 .globl __sdcc_gsinit_startup
+ 385 .globl __sdcc_program_startup
+ 386 .globl __start__stack
+ 387 .globl __mcs51_genXINIT
+ 388 .globl __mcs51_genXRAMCLEAR
+ 389 .globl __mcs51_genRAMCLEAR
+ 390 .area GSFINAL (CODE)
+ 0000 02s00r03 391 ljmp __sdcc_program_startup
+ 392 ;--------------------------------------------------------
+ 393 ; Home
+ 394 ;--------------------------------------------------------
+ 395 .area HOME (CODE)
+ 396 .area HOME (CODE)
+ 0003 397 __sdcc_program_startup:
+ 0003 12s00r00 398 lcall _main
+ 399 ; return from main will lock up
+ 0006 80 FE 400 sjmp .
+ 401 ;--------------------------------------------------------
+ 402 ; code
+ 403 ;--------------------------------------------------------
+ 404 .area CSEG (CODE)
+ 405 ;------------------------------------------------------------
+ 406 ;Allocation info for local variables in function 'main'
+ 407 ;------------------------------------------------------------
+ 408 ;i Allocated to registers r2 r3
+ 409 ;------------------------------------------------------------
+ 0000 410 G$main$0$0 ==.
+ 0000 411 C$ledmatrix.c$27$0$0 ==.
+ 412 ; ledmatrix.c:27: int main()
+ 413 ; -----------------------------------------
+ 414 ; function main
+ 415 ; -----------------------------------------
+ 0000 416 _main:
+ 0002 417 ar2 = 0x02
+ 0003 418 ar3 = 0x03
+ 0004 419 ar4 = 0x04
+ 0005 420 ar5 = 0x05
+ 0006 421 ar6 = 0x06
+ 0007 422 ar7 = 0x07
+ 0000 423 ar0 = 0x00
+ 0001 424 ar1 = 0x01
+ 0000 425 C$ledmatrix.c$30$1$1 ==.
+ 426 ; ledmatrix.c:30: while(1) {
+ 0000 427 00102$:
+ 0000 428 C$ledmatrix.c$31$2$2 ==.
+ 429 ; ledmatrix.c:31: for(i=0; i<8; i++) {
+ 0000 7A 00 430 mov r2,#0x00
+ 0002 7B 00 431 mov r3,#0x00
+ 0004 432 00104$:
+ 0004 C3 433 clr c
+ 0005 EA 434 mov a,r2
+ 0006 94 08 435 subb a,#0x08
+ 0008 EB 436 mov a,r3
+ 0009 64 80 437 xrl a,#0x80
+ 000B 94 80 438 subb a,#0x80
+ 000D 50 F1 439 jnc 00102$
+ 000F 440 C$ledmatrix.c$32$3$3 ==.
+ 441 ; ledmatrix.c:32: P1 = 0xff;
+ 000F 75 90 FF 442 mov _P1,#0xFF
+ 0012 443 C$ledmatrix.c$33$3$3 ==.
+ 444 ; ledmatrix.c:33: P0 = image[i];
+ 0012 EA 445 mov a,r2
+ 0013 24r00 446 add a,#_image
+ 0015 F5 82 447 mov dpl,a
+ 0017 EB 448 mov a,r3
+ 0018 34s00 449 addc a,#(_image >> 8)
+ 001A F5 83 450 mov dph,a
+ 001C E4 451 clr a
+ 001D 93 452 movc a,@a+dptr
+ 001E F5 80 453 mov _P0,a
+ 0020 454 C$ledmatrix.c$34$3$3 ==.
+ 455 ; ledmatrix.c:34: P1 = (1 << i) ^ 255;
+ 0020 8A F0 456 mov b,r2
+ 0022 05 F0 457 inc b
+ 0024 7C 01 458 mov r4,#0x01
+ 0026 7D 00 459 mov r5,#0x00
+ 0028 80 06 460 sjmp 00115$
+ 002A 461 00114$:
+ 002A EC 462 mov a,r4
+ 002B 2C 463 add a,r4
+ 002C FC 464 mov r4,a
+ 002D ED 465 mov a,r5
+ 002E 33 466 rlc a
+ 002F FD 467 mov r5,a
+ 0030 468 00115$:
+ 0030 D5 F0 F7 469 djnz b,00114$
+ 0033 74 FF 470 mov a,#0xFF
+ 0035 6C 471 xrl a,r4
+ 0036 F5 90 472 mov _P1,a
+ 0038 473 C$ledmatrix.c$31$2$2 ==.
+ 474 ; ledmatrix.c:31: for(i=0; i<8; i++) {
+ 0038 0A 475 inc r2
+ 0039 BA 00 C8 476 cjne r2,#0x00,00104$
+ 003C 0B 477 inc r3
+ 003D 478 C$ledmatrix.c$37$1$1 ==.
+ 003D 479 XG$main$0$0 ==.
+ 003D 80 C5 480 sjmp 00104$
+ 481 .area CSEG (CODE)
+ 482 .area CONST (CODE)
+ 0000 483 Fledmatrix$image$0$0 == .
+ 0000 484 _image:
+ 0000 B1 485 .db #0xB1
+ 0001 9D 486 .db #0x9D
+ 0002 BD 487 .db #0xBD
+ 0003 B1 488 .db #0xB1
+ 0004 B7 489 .db #0xB7
+ 0005 B7 490 .db #0xB7
+ 0006 11 491 .db #0x11
+ 0007 FF 492 .db #0xFF
+ 493 .area XINIT (CODE)
+ 494 .area CABS (ABS,CODE)
diff --git a/demo/ledmatrix.m5ihib b/demo/ledmatrix.m5ihib
new file mode 100644
index 0000000..40d686b
--- /dev/null
+++ b/demo/ledmatrix.m5ihib
@@ -0,0 +1,599 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+ This is MCU 8051 IDE hibernation data file.
+ It does not contain program code, only data.
+
+ PLEASE DO NOT EDIT THIS FILE MANUALY, BECAUSE
+ BAD FORMATING OF THIS FILE WILL LEAD MCU 8051 IDE TO CRASH !
+-->
+<!DOCTYPE m5ihib [
+
+ <!-- ROOT ELEMENT -->
+ <!ELEMENT m5ihib (currentstate, subprograms, stepback)>
+ <!-- Root element Parameters:
+ version - File version
+ datetime - Date and time of creation
+ source_file - Souce code compiled and loaded in simulator before hibernation
+ processor - Processor type
+ xdata - Size of External data memory
+ eeprom - Size of data EEPROM
+ md5 - MD5 hash of the source code file
+ -->
+ <!ATTLIST m5ihib
+ version CDATA #REQUIRED
+ datetime CDATA #REQUIRED
+ source_file CDATA #REQUIRED
+ processor CDATA #REQUIRED
+ xdata CDATA #REQUIRED
+ eeprom CDATA #REQUIRED
+ md5 CDATA #REQUIRED
+ >
+
+
+ <!-- Current state of MCU -->
+ <!ELEMENT currentstate (iram, eram, xram, eeprom, sfr, special)>
+
+ <!-- Internal data memory in decimal -->
+ <!ELEMENT iram (#PCDATA)>
+
+ <!-- Expanded data memory in decimal -->
+ <!ELEMENT eram (#PCDATA)>
+
+ <!-- External data memory in decimal -->
+ <!ELEMENT xram (#PCDATA)>
+
+ <!-- Data EEPROM in decimal -->
+ <!ELEMENT eeprom (#PCDATA)>
+
+ <!-- Special function registers -->
+ <!ELEMENT sfr (addresses, values)>
+
+ <!-- SFR decimal addresses in the same order as in tag values -->
+ <!ELEMENT addresses (#PCDATA)>
+
+ <!-- SFR decimal values in the same order as in tag values -->
+ <!ELEMENT values (#PCDATA)>
+
+ <!-- Special engine variables -->
+ <!ELEMENT special (#PCDATA)>
+
+
+ <!-- Content of list of active interrupts -->
+ <!ELEMENT subprograms (sub)*>
+ <!-- Parameters of tag "subprograms":
+ count - Number of recorded subprograms
+ -->
+ <!ATTLIST subprograms
+ count CDATA #REQUIRED
+ >
+
+ <!-- Active interrupt -->
+ <!ELEMENT sub EMPTY>
+ <!-- Parameters of tag "sub":
+ source - Source address
+ target - Target address
+ type - Type
+ -->
+ <!ATTLIST sub
+ source CDATA #REQUIRED
+ target CDATA #REQUIRED
+ type CDATA #REQUIRED
+ >
+
+
+ <!-- Stack for stepback function (backward stepping) -->
+ <!ELEMENT stepback (step)*>
+ <!-- Parameters of tag "stepback":
+ stacklength - Number of recorded program steps
+ -->
+ <!ATTLIST stepback
+ stacklength CDATA #REQUIRED
+ >
+
+ <!-- One program step -->
+ <!ELEMENT step (spec, normal)>
+
+ <!-- Special engine variables -->
+ <!ELEMENT spec (#PCDATA)>
+
+ <!-- Ordinary registers -->
+ <!ELEMENT normal (reg)*>
+
+ <!-- One register -->
+ <!ELEMENT reg EMPTY>
+ <!-- Parameters of tag "reg":
+ type - Memory type (E == ERAM; I == IDATA; X == XDATA; S == SFR)
+ addr - Register address
+ val - Previous register value
+ -->
+ <!ATTLIST reg
+ type CDATA #REQUIRED
+ addr CDATA #REQUIRED
+ val CDATA #REQUIRED
+ >
+
+]>
+<m5ihib
+ version="1.0"
+ datetime="02/27/09 04:45:11"
+ source_file="ledmatrix.c"
+ processor="AT89C51"
+ xdata="2809"
+ eeprom="0"
+ md5="517133F895352F3918C3E1250EA990A5">
+ <currentstate>
+ <iram>
+ 0 0 0 0 0 0 0 0
+ 6 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ </iram>
+ <eram>
+
+ </eram>
+ <xram>
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0
+ </xram>
+ <eeprom>
+
+ </eeprom>
+ <sfr>
+ <addresses>
+ 152 135 153 136 137 138 139
+ 140 176 141 240 160 224 144
+ 208 128 129 130 409 131 184
+ 168
+ </addresses>
+ <values>
+ 0 0 247 0 0 0 0
+ 0 255 0 0 255 0 255
+ 0 255 9 0 120 0 0
+ 0
+ </values>
+ </sfr>
+ <special>
+ 0 {255 255 255 255 0} 100 0 {} 0 0 0 0 415 415 {} 0 0 0 0 0 0 0 0 2
+ </special>
+ </currentstate>
+ <subprograms count="1">
+ <sub source="6" target="100" type="0"/>
+ </subprograms>
+ <stepback stacklength="10">
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 61 0 {} 0 0 0 0 401 401 {} 0 0 0 0 0 0 0 0 1
+ </spec><normal>
+ <reg type="I" addr="0" val="0"/>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 63 0 {} 0 0 0 0 402 402 {} 0 0 0 0 0 0 0 0 1
+ </spec><normal>
+ <reg type="S" addr="224" val="0"/>
+ <reg type="S" addr="208" val="0"/>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 64 0 {} 0 0 0 0 403 403 {} 0 0 0 0 0 0 0 0 1
+ </spec><normal>
+ <reg type="S" addr="224" val="0"/>
+ <reg type="S" addr="208" val="0"/>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 66 0 {} 0 0 0 0 404 404 {} 0 0 0 0 0 0 0 0 2
+ </spec><normal>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 78 0 {} 0 0 0 0 406 406 {} 0 0 0 0 0 0 0 0 1
+ </spec><normal>
+ <reg type="I" addr="0" val="0"/>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 80 0 {} 0 0 0 0 407 407 {} 0 0 0 0 0 0 0 0 1
+ </spec><normal>
+ <reg type="S" addr="224" val="0"/>
+ <reg type="S" addr="208" val="0"/>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 81 0 {} 0 0 0 0 408 408 {} 0 0 0 0 0 0 0 0 1
+ </spec><normal>
+ <reg type="S" addr="224" val="0"/>
+ <reg type="S" addr="208" val="0"/>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 83 0 {} 0 0 0 0 409 409 {} 0 0 0 0 0 0 0 0 2
+ </spec><normal>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 0 {255 255 255 255 0} 97 0 {} 0 0 0 0 411 411 {} 0 0 0 0 0 0 0 0 2
+ </spec><normal>
+ </normal>
+ </step>
+ <step>
+ <spec>
+ 2 {255 255 255 255 0} 3 0 {} 0 0 0 0 413 413 {} 0 0 0 0 0 0 0 0 2
+ </spec><normal>
+ <reg type="S" addr="129" val="7"/>
+ <reg type="I" addr="8" val="0"/>
+ <reg type="I" addr="9" val="0"/>
+ </normal>
+ </step>
+ </stepback>
+</m5ihib>
diff --git a/demo/ledmatrix.map b/demo/ledmatrix.map
new file mode 100644
index 0000000..0fdab15
--- /dev/null
+++ b/demo/ledmatrix.map
@@ -0,0 +1,454 @@
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CABS 0000 0000 = 0. bytes (ABS,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:FFFFFF00 s_BSEG
+ 0C:0000 l_BIT_BANK
+ 0C:0000 l_BSEG
+ 0C:0000 l_BSEG_BYTES
+ 0C:0000 l_CABS
+ 0C:0000 l_GSINIT
+ 0C:0000 l_GSINIT1
+ 0C:0000 l_GSINIT5
+ 0C:0000 l_IABS
+ 0C:0000 l_ISEG
+ 0C:0000 l_OSEG
+ 0C:0000 l_PSEG
+ 0C:0000 l_REG_BANK_1
+ 0C:0000 l_REG_BANK_2
+ 0C:0000 l_REG_BANK_3
+ 0C:0000 l_RSEG
+ 0C:0000 l_XABS
+ 0C:0000 l_XINIT
+ 0C:0000 l_XISEG
+ 0C:0000 l_XSEG
+ 0C:0000 l__CODE
+ 0C:0000 s_BSEG_BYTES
+ 0C:0000 s_CABS
+ 0C:0000 s_DSEG
+ 0C:0000 s_HOME
+ 0C:0000 s_IABS
+ 0C:0000 s_ISEG
+ 0C:0000 s_PSEG
+ 0C:0000 s_REG_BANK_0
+ 0C:0000 s_XABS
+ 0C:0000 s_XISEG
+ 0C:0000 s_XSEG
+ 0C:0003 l_GSFINAL
+ 0C:0003 l_GSINIT0
+ 0C:0008 l_CONST
+ 0C:0008 l_HOME
+ 0C:0008 l_REG_BANK_0
+ 0C:0008 s_GSINIT0
+ 0C:0008 s_REG_BANK_1
+ 0C:0008 s_RSEG
+ 0C:0008 s_SSEG
+ 0C:000A l_GSINIT2
+ 0C:000B s_GSINIT1
+ 0C:000B s_GSINIT2
+ 0C:0010 s_REG_BANK_2
+ 0C:0015 s_GSINIT3
+ 0C:0018 s_BIT_BANK
+ 0C:0018 s_OSEG
+ 0C:0018 s_REG_BANK_3
+ 0C:0020 s__CODE
+ 0C:0022 l_GSINIT3
+ 0C:002A l_GSINIT4
+ 0C:0037 s_GSINIT4
+ 0C:0043 l_CSEG
+ 0C:0061 s_GSFINAL
+ 0C:0061 s_GSINIT
+ 0C:0061 s_GSINIT5
+ 0C:0064 s_CSEG
+ 0C:0080 l_DSEG
+ 0C:00A7 s_CONST
+ 0C:00AF s_XINIT
+ 0C:00F8 l_SSEG
+ 0C:0100 l_IRAM
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+. .ABS. 0000 0000 = 0. bytes (ABS,CON)
+
+ Value Global
+ -------- --------------------------------
+ 0080 G$P0$0$0
+ 0080 G$P0_0$0$0
+ 0080 _P0
+ 0080 _P0_0
+ 0081 G$P0_1$0$0
+ 0081 G$SP$0$0
+ 0081 _P0_1
+ 0081 _SP
+ 0082 G$DPL$0$0
+ 0082 G$P0_2$0$0
+ 0082 _DPL
+ 0082 _P0_2
+ 0083 G$DPH$0$0
+ 0083 G$P0_3$0$0
+ 0083 _DPH
+ 0083 _P0_3
+ 0084 G$P0_4$0$0
+ 0084 _P0_4
+ 0085 G$P0_5$0$0
+ 0085 _P0_5
+ 0086 G$P0_6$0$0
+ 0086 _P0_6
+ 0087 G$P0_7$0$0
+ 0087 G$PCON$0$0
+ 0087 _P0_7
+ 0087 _PCON
+ 0088 G$IT0$0$0
+ 0088 G$TCON$0$0
+ 0088 _IT0
+ 0088 _TCON
+ 0089 G$IE0$0$0
+ 0089 G$TMOD$0$0
+ 0089 _IE0
+ 0089 _TMOD
+ 008A G$IT1$0$0
+ 008A G$TL0$0$0
+ 008A _IT1
+ 008A _TL0
+ 008B G$IE1$0$0
+ 008B G$TL1$0$0
+ 008B _IE1
+ 008B _TL1
+ 008C G$TH0$0$0
+ 008C G$TR0$0$0
+ 008C _TH0
+ 008C _TR0
+ 008D G$TF0$0$0
+ 008D G$TH1$0$0
+ 008D _TF0
+ 008D _TH1
+ 008E G$TR1$0$0
+ 008E _TR1
+ 008F G$TF1$0$0
+ 008F _TF1
+ 0090 G$P1$0$0
+ 0090 G$P1_0$0$0
+ 0090 _P1
+ 0090 _P1_0
+ 0091 G$P1_1$0$0
+ 0091 _P1_1
+ 0092 G$P1_2$0$0
+ 0092 _P1_2
+ 0093 G$P1_3$0$0
+ 0093 _P1_3
+ 0094 G$P1_4$0$0
+ 0094 _P1_4
+ 0095 G$P1_5$0$0
+ 0095 _P1_5
+ 0096 G$P1_6$0$0
+ 0096 _P1_6
+ 0097 G$P1_7$0$0
+ 0097 _P1_7
+ 0098 G$RI$0$0
+ 0098 G$SCON$0$0
+ 0098 _RI
+ 0098 _SCON
+ 0099 G$SBUF$0$0
+ 0099 G$TI$0$0
+ 0099 _SBUF
+ 0099 _TI
+ 009A G$RB8$0$0
+ 009A _RB8
+ 009B G$TB8$0$0
+ 009B _TB8
+ 009C G$REN$0$0
+ 009C _REN
+ 009D G$SM2$0$0
+ 009D _SM2
+ 009E G$SM1$0$0
+ 009E _SM1
+ 009F G$SM0$0$0
+ 009F _SM0
+ 00A0 G$P2$0$0
+ 00A0 G$P2_0$0$0
+ 00A0 _P2
+ 00A0 _P2_0
+ 00A0 __XPAGE
+ 00A1 G$P2_1$0$0
+ 00A1 _P2_1
+ 00A2 G$P2_2$0$0
+ 00A2 _P2_2
+ 00A3 G$P2_3$0$0
+ 00A3 _P2_3
+ 00A4 G$P2_4$0$0
+ 00A4 _P2_4
+ 00A5 G$P2_5$0$0
+ 00A5 _P2_5
+ 00A6 G$P2_6$0$0
+ 00A6 _P2_6
+ 00A7 G$P2_7$0$0
+ 00A7 _P2_7
+ 00A8 G$EX0$0$0
+ 00A8 G$IE$0$0
+ 00A8 _EX0
+ 00A8 _IE
+ 00A9 G$ET0$0$0
+ 00A9 _ET0
+ 00AA G$EX1$0$0
+ 00AA _EX1
+ 00AB G$ET1$0$0
+ 00AB _ET1
+ 00AC G$ES$0$0
+ 00AC _ES
+ 00AF G$EA$0$0
+ 00AF _EA
+ 00B0 G$P3$0$0
+ 00B0 G$P3_0$0$0
+ 00B0 G$RXD$0$0
+ 00B0 _P3
+ 00B0 _P3_0
+ 00B0 _RXD
+ 00B1 G$P3_1$0$0
+ 00B1 G$TXD$0$0
+ 00B1 _P3_1
+ 00B1 _TXD
+ 00B2 G$INT0$0$0
+ 00B2 G$P3_2$0$0
+ 00B2 _INT0
+ 00B2 _P3_2
+ 00B3 G$INT1$0$0
+ 00B3 G$P3_3$0$0
+ 00B3 _INT1
+ 00B3 _P3_3
+ 00B4 G$P3_4$0$0
+ 00B4 G$T0$0$0
+ 00B4 _P3_4
+ 00B4 _T0
+ 00B5 G$P3_5$0$0
+ 00B5 G$T1$0$0
+ 00B5 _P3_5
+ 00B5 _T1
+ 00B6 G$P3_6$0$0
+ 00B6 G$WR$0$0
+ 00B6 _P3_6
+ 00B6 _WR
+ 00B7 G$P3_7$0$0
+ 00B7 G$RD$0$0
+ 00B7 _P3_7
+ 00B7 _RD
+ 00B8 G$IP$0$0
+ 00B8 G$PX0$0$0
+ 00B8 _IP
+ 00B8 _PX0
+ 00B9 G$PT0$0$0
+ 00B9 _PT0
+ 00BA G$PX1$0$0
+ 00BA _PX1
+ 00BB G$PT1$0$0
+ 00BB _PT1
+ 00BC G$PS$0$0
+ 00BC _PS
+ 00D0 G$P$0$0
+ 00D0 G$PSW$0$0
+ 00D0 _P
+ 00D0 _PSW
+ 00D1 G$FL$0$0
+ 00D1 _FL
+ 00D2 G$OV$0$0
+ 00D2 _OV
+ 00D3 G$RS0$0$0
+ 00D3 _RS0
+ 00D4 G$RS1$0$0
+ 00D4 _RS1
+ 00D5 G$F0$0$0
+ 00D5 _F0
+ 00D6 G$AC$0$0
+ 00D6 _AC
+ 00D7 G$CY$0$0
+ 00D7 _CY
+ 00E0 G$A$0$0
+ 00E0 G$ACC$0$0
+ 00E0 _A
+ 00E0 _ACC
+ 00F0 G$B$0$0
+ 00F0 _B
+
+
+
+
+
+
+
+
+
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+SSEG 0008 00F8 = 248. bytes (REL,OVR)
+
+ Value Global
+ -------- --------------------------------
+ 0008 __start__stack
+
+
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+HOME 0000 0008 = 8. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0000 A$ledmatrix$376
+ 0C:0003 A$ledmatrix$398
+ 0C:0003 __sdcc_program_startup
+ 0C:0006 A$ledmatrix$400
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT0 0008 0003 = 3. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0008 __sdcc_gsinit_startup
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT3 0015 0022 = 34. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0015 __mcs51_genXINIT
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSINIT4 0037 002A = 42. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0037 __mcs51_genRAMCLEAR
+ 0C:003D __mcs51_genXRAMCLEAR
+
+
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+GSFINAL 0061 0003 = 3. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0061 A$ledmatrix$391
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CSEG 0064 0043 = 67. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:0064 A$ledmatrix$430
+ 0C:0064 C$ledmatrix.c$27$0$0
+ 0C:0064 C$ledmatrix.c$30$1$1
+ 0C:0064 G$main$0$0
+ 0C:0064 _main
+ 0C:0066 A$ledmatrix$431
+ 0C:0068 A$ledmatrix$433
+ 0C:0069 A$ledmatrix$434
+ 0C:006A A$ledmatrix$435
+ 0C:006C A$ledmatrix$436
+ 0C:006D A$ledmatrix$437
+ 0C:006F A$ledmatrix$438
+ 0C:0071 A$ledmatrix$439
+ 0C:0073 A$ledmatrix$442
+ 0C:0073 C$ledmatrix.c$32$3$3
+ 0C:0076 A$ledmatrix$445
+ 0C:0076 C$ledmatrix.c$33$3$3
+ 0C:0077 A$ledmatrix$446
+ 0C:0079 A$ledmatrix$447
+ 0C:007B A$ledmatrix$448
+ 0C:007C A$ledmatrix$449
+ 0C:007E A$ledmatrix$450
+ 0C:0080 A$ledmatrix$451
+ 0C:0081 A$ledmatrix$452
+ 0C:0082 A$ledmatrix$453
+ 0C:0084 A$ledmatrix$456
+ 0C:0084 C$ledmatrix.c$34$3$3
+ 0C:0086 A$ledmatrix$457
+ 0C:0088 A$ledmatrix$458
+ 0C:008A A$ledmatrix$459
+ 0C:008C A$ledmatrix$460
+ 0C:008E A$ledmatrix$462
+ 0C:008F A$ledmatrix$463
+ 0C:0090 A$ledmatrix$464
+ 0C:0091 A$ledmatrix$465
+ 0C:0092 A$ledmatrix$466
+ 0C:0093 A$ledmatrix$467
+ 0C:0094 A$ledmatrix$469
+ 0C:0097 A$ledmatrix$470
+ 0C:0099 A$ledmatrix$471
+ 0C:009A A$ledmatrix$472
+ 0C:009C A$ledmatrix$475
+ 0C:009C C$ledmatrix.c$31$2$2
+ 0C:009D A$ledmatrix$476
+ 0C:00A0 A$ledmatrix$477
+ 0C:00A1 A$ledmatrix$480
+ 0C:00A1 C$ledmatrix.c$37$1$1
+ 0C:00A1 XG$main$0$0
+ 0C:00A3 __sdcc_external_startup
+
+Hexadecimal
+
+Area Addr Size Decimal Bytes (Attributes)
+-------------------------------- ---- ---- ------- ----- ------------
+CONST 00A7 0008 = 8. bytes (REL,CON,CODE)
+
+ Value Global
+ -------- --------------------------------
+ 0C:00A7 Fledmatrix$image$0$0
+
+ ASxxxx Linker V01.75 + NoICE + SDCC Feb 1999, page 1.
+
+Files Linked [ module(s) ]
+
+ledmatrix.rel
+
+Libraries Linked [ object file ]
+
+/usr/share/sdcc/lib/small/mcs51.lib [ crtclear.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtxinit.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtxclear.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtpagesfr.rel ]
+/usr/share/sdcc/lib/small/mcs51.lib [ crtstart.rel ]
+/usr/share/sdcc/lib/small/libsdcc.lib [ _startup.rel ]
+
+ ASxxxx Linker V01.75 + NoICE + SDCC Feb 1999, page 2.
+
+User Base Address Definitions
+
+HOME = 0x0000
+ISEG = 0x0000
+BSEG = 0x0000
+
+ \ No newline at end of file
diff --git a/demo/ledmatrix.mem b/demo/ledmatrix.mem
new file mode 100644
index 0000000..0275aa5
--- /dev/null
+++ b/demo/ledmatrix.mem
@@ -0,0 +1,28 @@
+Internal RAM layout:
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+0x00:|0|0|0|0|0|0|0|0|S|S|S|S|S|S|S|S|
+0x10:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x20:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x30:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x40:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x80:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0x90:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xa0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xb0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xc0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xd0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xe0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0xf0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
+0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
+
+Stack starts at: 0x08 (sp set to 0x07) with 248 bytes available.
+
+Other memory:
+ Name Start End Size Max
+ ---------------- -------- -------- -------- --------
+ PAGED EXT. RAM 0 0
+ EXTERNAL RAM 0 0
+ ROM/EPROM/FLASH 0x0000 0x00ae 175 8192
diff --git a/demo/ledmatrix.rel b/demo/ledmatrix.rel
new file mode 100644
index 0000000..e4cdd26
--- /dev/null
+++ b/demo/ledmatrix.rel
@@ -0,0 +1,328 @@
+;!FILE ledmatrix.asm
+XH
+H 1A areas FD global symbols
+M ledmatrix
+O -mmcs51 --model-small
+S G$EX0$0$0 Def00A8
+S G$IT0$0$0 Def0088
+S G$TH1$0$0 Def008D
+S _P1 Def0090
+S _A Def00E0
+S G$RXD$0$0 Def00B0
+S G$EX1$0$0 Def00AA
+S G$TB8$0$0 Def009B
+S G$IT1$0$0 Def008A
+S G$IE$0$0 Def00A8
+S _P2 Def00A0
+S _B Def00F0
+S _SP Def0081
+S _P3 Def00B0
+S _PS Def00BC
+S G$TXD$0$0 Def00B1
+S G$SM0$0$0 Def009F
+S G$TL0$0$0 Def008A
+S _T0 Def00B4
+S G$SM1$0$0 Def009E
+S G$TL1$0$0 Def008B
+S _T1 Def00B5
+S _OV Def00D2
+S G$FL$0$0 Def00D1
+S G$SM2$0$0 Def009D
+S _ACC Def00E0
+S __mcs51_genRAMCLEAR Ref0000
+S G$PT0$0$0 Def00B9
+S G$RS0$0$0 Def00D3
+S G$PT1$0$0 Def00BB
+S _WR Def00B6
+S G$F0$0$0 Def00D5
+S G$RS1$0$0 Def00D4
+S G$RD$0$0 Def00B7
+S G$TR0$0$0 Def008C
+S G$TR1$0$0 Def008E
+S G$PX0$0$0 Def00B8
+S G$ES$0$0 Def00AC
+S G$PX1$0$0 Def00BA
+S G$IP$0$0 Def00B8
+S G$PSW$0$0 Def00D0
+S G$RI$0$0 Def0098
+S _P0_0 Def0080
+S G$CY$0$0 Def00D7
+S _PCON Def0087
+S _SBUF Def0099
+S _P0_1 Def0081
+S _P1_0 Def0090
+S _P Def00D0
+S G$TI$0$0 Def0099
+S _P0_2 Def0082
+S _P1_1 Def0091
+S _P2_0 Def00A0
+S _P0_3 Def0083
+S _P1_2 Def0092
+S _P2_1 Def00A1
+S _P3_0 Def00B0
+S _SCON Def0098
+S _P0_4 Def0084
+S _P1_3 Def0093
+S _P2_2 Def00A2
+S _P3_1 Def00B1
+S G$P0$0$0 Def0080
+S _TCON Def0088
+S _TMOD Def0089
+S _P0_5 Def0085
+S _P1_4 Def0094
+S _P2_3 Def00A3
+S _P3_2 Def00B2
+S G$A$0$0 Def00E0
+S G$P1$0$0 Def0090
+S _P0_6 Def0086
+S _P1_5 Def0095
+S _P2_4 Def00A4
+S _P3_3 Def00B3
+S G$B$0$0 Def00F0
+S G$P2$0$0 Def00A0
+S _P0_7 Def0087
+S _P1_6 Def0096
+S _P2_5 Def00A5
+S _P3_4 Def00B4
+S G$PS$0$0 Def00BC
+S G$P3$0$0 Def00B0
+S G$SP$0$0 Def0081
+S _P1_7 Def0097
+S _P2_6 Def00A6
+S _P3_5 Def00B5
+S G$T0$0$0 Def00B4
+S _P2_7 Def00A7
+S _P3_6 Def00B6
+S G$OV$0$0 Def00D2
+S G$T1$0$0 Def00B5
+S _P3_7 Def00B7
+S G$ACC$0$0 Def00E0
+S _INT0 Def00B2
+S _DPH Def0083
+S _INT1 Def00B3
+S G$WR$0$0 Def00B6
+S _IE0 Def0089
+S _IE1 Def008B
+S _DPL Def0082
+S G$P0_0$0$0 Def0080
+S G$P$0$0 Def00D0
+S G$P1_0$0$0 Def0090
+S G$P0_1$0$0 Def0081
+S G$SBUF$0$0 Def0099
+S G$PCON$0$0 Def0087
+S _AC Def00D6
+S G$P2_0$0$0 Def00A0
+S G$P1_1$0$0 Def0091
+S G$P0_2$0$0 Def0082
+S _REN Def009C
+S G$P3_0$0$0 Def00B0
+S G$P2_1$0$0 Def00A1
+S G$P1_2$0$0 Def0092
+S G$P0_3$0$0 Def0083
+S _EA Def00AF
+S G$P3_1$0$0 Def00B1
+S G$P2_2$0$0 Def00A2
+S G$P1_3$0$0 Def0093
+S G$P0_4$0$0 Def0084
+S G$SCON$0$0 Def0098
+S G$P3_2$0$0 Def00B2
+S G$P2_3$0$0 Def00A3
+S G$P1_4$0$0 Def0094
+S G$P0_5$0$0 Def0085
+S G$TMOD$0$0 Def0089
+S G$TCON$0$0 Def0088
+S G$P3_3$0$0 Def00B3
+S G$P2_4$0$0 Def00A4
+S G$P1_5$0$0 Def0095
+S G$P0_6$0$0 Def0086
+S _ET0 Def00A9
+S G$P3_4$0$0 Def00B4
+S G$P2_5$0$0 Def00A5
+S G$P1_6$0$0 Def0096
+S G$P0_7$0$0 Def0087
+S _TF0 Def008D
+S _ET1 Def00AB
+S G$P3_5$0$0 Def00B5
+S G$P2_6$0$0 Def00A6
+S G$P1_7$0$0 Def0097
+S _TF1 Def008F
+S G$P3_6$0$0 Def00B6
+S G$P2_7$0$0 Def00A7
+S _TH0 Def008C
+S _RB8 Def009A
+S __mcs51_genXINIT Ref0000
+S G$P3_7$0$0 Def00B7
+S _TH1 Def008D
+S _IT0 Def0088
+S _EX0 Def00A8
+S _IE Def00A8
+S _IT1 Def008A
+S _TB8 Def009B
+S _EX1 Def00AA
+S _RXD Def00B0
+S G$INT0$0$0 Def00B2
+S G$INT1$0$0 Def00B3
+S G$DPH$0$0 Def0083
+S _TL0 Def008A
+S _SM0 Def009F
+S _TXD Def00B1
+S _TL1 Def008B
+S _SM1 Def009E
+S G$IE0$0$0 Def0089
+S _SM2 Def009D
+S _FL Def00D1
+S G$IE1$0$0 Def008B
+S G$DPL$0$0 Def0082
+S _PT0 Def00B9
+S _PT1 Def00BB
+S _RS0 Def00D3
+S _TR0 Def008C
+S _RD Def00B7
+S _RS1 Def00D4
+S _F0 Def00D5
+S _TR1 Def008E
+S G$AC$0$0 Def00D6
+S _ES Def00AC
+S _PX0 Def00B8
+S G$REN$0$0 Def009C
+S _IP Def00B8
+S _PX1 Def00BA
+S G$EA$0$0 Def00AF
+S _PSW Def00D0
+S __sdcc_gsinit_startup Ref0000
+S _RI Def0098
+S _CY Def00D7
+S G$ET0$0$0 Def00A9
+S _TI Def0099
+S G$ET1$0$0 Def00AB
+S G$TF0$0$0 Def008D
+S G$TF1$0$0 Def008F
+S __mcs51_genXRAMCLEAR Ref0000
+S G$RB8$0$0 Def009A
+S G$TH0$0$0 Def008C
+S _P0 Def0080
+A _CODE size 0 flags 0 addr 0
+A RSEG size 0 flags 0 addr 0
+A REG_BANK_0 size 8 flags 4 addr 0
+A DSEG size 0 flags 0 addr 0
+A OSEG size 0 flags 4 addr 0
+A SSEG size 1 flags 0 addr 0
+S __start__stack Def0000
+A ISEG size 0 flags 0 addr 0
+A IABS size 0 flags 8 addr 0
+A BSEG size 0 flags 80 addr 0
+A PSEG size 0 flags 50 addr 0
+A XSEG size 0 flags 40 addr 0
+A XABS size 0 flags 48 addr 0
+A XISEG size 0 flags 40 addr 0
+A HOME size 8 flags 20 addr 0
+S A$ledmatrix$400 Def0006
+S A$ledmatrix$376 Def0000
+S A$ledmatrix$398 Def0003
+S __sdcc_program_startup Def0003
+A GSINIT0 size 0 flags 20 addr 0
+A GSINIT1 size 0 flags 20 addr 0
+A GSINIT2 size 0 flags 20 addr 0
+A GSINIT3 size 0 flags 20 addr 0
+A GSINIT4 size 0 flags 20 addr 0
+A GSINIT5 size 0 flags 20 addr 0
+A GSINIT size 0 flags 20 addr 0
+A GSFINAL size 3 flags 20 addr 0
+S A$ledmatrix$391 Def0000
+A CSEG size 3F flags 20 addr 0
+S _main Def0000
+S A$ledmatrix$430 Def0000
+S A$ledmatrix$431 Def0002
+S A$ledmatrix$450 Def001A
+S A$ledmatrix$460 Def0028
+S A$ledmatrix$451 Def001C
+S A$ledmatrix$442 Def000F
+S A$ledmatrix$433 Def0004
+S A$ledmatrix$470 Def0033
+S A$ledmatrix$452 Def001D
+S A$ledmatrix$434 Def0005
+S A$ledmatrix$480 Def003D
+S A$ledmatrix$471 Def0035
+S A$ledmatrix$462 Def002A
+S A$ledmatrix$453 Def001E
+S A$ledmatrix$435 Def0006
+S A$ledmatrix$472 Def0036
+S A$ledmatrix$463 Def002B
+S A$ledmatrix$445 Def0012
+S A$ledmatrix$436 Def0008
+S XG$main$0$0 Def003D
+S A$ledmatrix$464 Def002C
+S A$ledmatrix$446 Def0013
+S A$ledmatrix$437 Def0009
+S A$ledmatrix$465 Def002D
+S A$ledmatrix$456 Def0020
+S A$ledmatrix$447 Def0015
+S A$ledmatrix$438 Def000B
+S A$ledmatrix$475 Def0038
+S A$ledmatrix$466 Def002E
+S A$ledmatrix$457 Def0022
+S A$ledmatrix$448 Def0017
+S A$ledmatrix$439 Def000D
+S C$ledmatrix.c$30$1$1 Def0000
+S A$ledmatrix$476 Def0039
+S A$ledmatrix$467 Def002F
+S A$ledmatrix$458 Def0024
+S A$ledmatrix$449 Def0018
+S A$ledmatrix$477 Def003C
+S A$ledmatrix$459 Def0026
+S A$ledmatrix$469 Def0030
+S C$ledmatrix.c$31$2$2 Def0038
+S C$ledmatrix.c$27$0$0 Def0000
+S G$main$0$0 Def0000
+S C$ledmatrix.c$32$3$3 Def000F
+S C$ledmatrix.c$37$1$1 Def003D
+S C$ledmatrix.c$33$3$3 Def0012
+S C$ledmatrix.c$34$3$3 Def0020
+A CONST size 8 flags 20 addr 0
+S Fledmatrix$image$0$0 Def0000
+A XINIT size 0 flags 20 addr 0
+A CABS size 0 flags 28 addr 0
+T 00 00
+R 00 00 00 02
+T 00 00
+R 00 00 00 05
+T 00 00
+R 00 00 00 05
+T 00 00
+R 00 00 00 0D
+T 00 00 02 00 00
+R 00 00 00 0D 02 03 00 BA
+T 00 00 02 00 03
+R 00 00 00 15 00 03 00 0D
+T 00 03
+R 00 00 00 0D
+T 00 03 12 00 00 80 FE
+R 00 00 00 0D 00 03 00 16
+T 00 00
+R 00 00 00 16
+T 00 00
+R 00 00 00 16
+T 00 00 7A 00 7B 00
+R 00 00 00 16
+T 00 04
+R 00 00 00 16
+T 00 04 C3 EA 94 08 EB 64 80 94 80 50 F1 75 90 FF
+R 00 00 00 16
+T 00 12 EA 24 00 00 00 F5 82 EB 34 00 00 00 F5 83
+R 00 00 00 16 F1 01 04 00 17 F1 81 0B 00 17
+T 00 1C E4 93 F5 80 8A F0 05 F0 7C 01 7D 00 80 06
+R 00 00 00 16
+T 00 2A
+R 00 00 00 16
+T 00 2A EC 2C FC ED 33 FD
+R 00 00 00 16
+T 00 30
+R 00 00 00 16
+T 00 30 D5 F0 F7 74 FF 6C F5 90 0A BA 00 C8 0B 80
+R 00 00 00 16
+T 00 3E C5
+R 00 00 00 16
+T 00 00
+R 00 00 00 17
+T 00 00 B1 9D BD B1 B7 B7 11 FF
+R 00 00 00 17
diff --git a/demo/ledmatrix.rst b/demo/ledmatrix.rst
new file mode 100644
index 0000000..9a26795
--- /dev/null
+++ b/demo/ledmatrix.rst
@@ -0,0 +1,494 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 2.9.0 #5416 (Oct 6 2009) (UNIX)
+ 4 ; This file was generated Mon Oct 19 23:11:07 2009
+ 5 ;--------------------------------------------------------
+ 6 .module ledmatrix
+ 7 .optsdcc -mmcs51 --model-small
+ 8
+ 9 ;--------------------------------------------------------
+ 10 ; Public variables in this module
+ 11 ;--------------------------------------------------------
+ 12 .globl _main
+ 13 .globl _CY
+ 14 .globl _AC
+ 15 .globl _F0
+ 16 .globl _RS1
+ 17 .globl _RS0
+ 18 .globl _OV
+ 19 .globl _FL
+ 20 .globl _P
+ 21 .globl _PS
+ 22 .globl _PT1
+ 23 .globl _PX1
+ 24 .globl _PT0
+ 25 .globl _PX0
+ 26 .globl _RD
+ 27 .globl _WR
+ 28 .globl _T1
+ 29 .globl _T0
+ 30 .globl _INT1
+ 31 .globl _INT0
+ 32 .globl _TXD
+ 33 .globl _RXD
+ 34 .globl _P3_7
+ 35 .globl _P3_6
+ 36 .globl _P3_5
+ 37 .globl _P3_4
+ 38 .globl _P3_3
+ 39 .globl _P3_2
+ 40 .globl _P3_1
+ 41 .globl _P3_0
+ 42 .globl _EA
+ 43 .globl _ES
+ 44 .globl _ET1
+ 45 .globl _EX1
+ 46 .globl _ET0
+ 47 .globl _EX0
+ 48 .globl _P2_7
+ 49 .globl _P2_6
+ 50 .globl _P2_5
+ 51 .globl _P2_4
+ 52 .globl _P2_3
+ 53 .globl _P2_2
+ 54 .globl _P2_1
+ 55 .globl _P2_0
+ 56 .globl _SM0
+ 57 .globl _SM1
+ 58 .globl _SM2
+ 59 .globl _REN
+ 60 .globl _TB8
+ 61 .globl _RB8
+ 62 .globl _TI
+ 63 .globl _RI
+ 64 .globl _P1_7
+ 65 .globl _P1_6
+ 66 .globl _P1_5
+ 67 .globl _P1_4
+ 68 .globl _P1_3
+ 69 .globl _P1_2
+ 70 .globl _P1_1
+ 71 .globl _P1_0
+ 72 .globl _TF1
+ 73 .globl _TR1
+ 74 .globl _TF0
+ 75 .globl _TR0
+ 76 .globl _IE1
+ 77 .globl _IT1
+ 78 .globl _IE0
+ 79 .globl _IT0
+ 80 .globl _P0_7
+ 81 .globl _P0_6
+ 82 .globl _P0_5
+ 83 .globl _P0_4
+ 84 .globl _P0_3
+ 85 .globl _P0_2
+ 86 .globl _P0_1
+ 87 .globl _P0_0
+ 88 .globl _B
+ 89 .globl _A
+ 90 .globl _ACC
+ 91 .globl _PSW
+ 92 .globl _IP
+ 93 .globl _P3
+ 94 .globl _IE
+ 95 .globl _P2
+ 96 .globl _SBUF
+ 97 .globl _SCON
+ 98 .globl _P1
+ 99 .globl _TH1
+ 100 .globl _TH0
+ 101 .globl _TL1
+ 102 .globl _TL0
+ 103 .globl _TMOD
+ 104 .globl _TCON
+ 105 .globl _PCON
+ 106 .globl _DPH
+ 107 .globl _DPL
+ 108 .globl _SP
+ 109 .globl _P0
+ 110 ;--------------------------------------------------------
+ 111 ; special function registers
+ 112 ;--------------------------------------------------------
+ 113 .area RSEG (DATA)
+ 0080 114 G$P0$0$0 == 0x0080
+ 0080 115 _P0 = 0x0080
+ 0081 116 G$SP$0$0 == 0x0081
+ 0081 117 _SP = 0x0081
+ 0082 118 G$DPL$0$0 == 0x0082
+ 0082 119 _DPL = 0x0082
+ 0083 120 G$DPH$0$0 == 0x0083
+ 0083 121 _DPH = 0x0083
+ 0087 122 G$PCON$0$0 == 0x0087
+ 0087 123 _PCON = 0x0087
+ 0088 124 G$TCON$0$0 == 0x0088
+ 0088 125 _TCON = 0x0088
+ 0089 126 G$TMOD$0$0 == 0x0089
+ 0089 127 _TMOD = 0x0089
+ 008A 128 G$TL0$0$0 == 0x008a
+ 008A 129 _TL0 = 0x008a
+ 008B 130 G$TL1$0$0 == 0x008b
+ 008B 131 _TL1 = 0x008b
+ 008C 132 G$TH0$0$0 == 0x008c
+ 008C 133 _TH0 = 0x008c
+ 008D 134 G$TH1$0$0 == 0x008d
+ 008D 135 _TH1 = 0x008d
+ 0090 136 G$P1$0$0 == 0x0090
+ 0090 137 _P1 = 0x0090
+ 0098 138 G$SCON$0$0 == 0x0098
+ 0098 139 _SCON = 0x0098
+ 0099 140 G$SBUF$0$0 == 0x0099
+ 0099 141 _SBUF = 0x0099
+ 00A0 142 G$P2$0$0 == 0x00a0
+ 00A0 143 _P2 = 0x00a0
+ 00A8 144 G$IE$0$0 == 0x00a8
+ 00A8 145 _IE = 0x00a8
+ 00B0 146 G$P3$0$0 == 0x00b0
+ 00B0 147 _P3 = 0x00b0
+ 00B8 148 G$IP$0$0 == 0x00b8
+ 00B8 149 _IP = 0x00b8
+ 00D0 150 G$PSW$0$0 == 0x00d0
+ 00D0 151 _PSW = 0x00d0
+ 00E0 152 G$ACC$0$0 == 0x00e0
+ 00E0 153 _ACC = 0x00e0
+ 00E0 154 G$A$0$0 == 0x00e0
+ 00E0 155 _A = 0x00e0
+ 00F0 156 G$B$0$0 == 0x00f0
+ 00F0 157 _B = 0x00f0
+ 158 ;--------------------------------------------------------
+ 159 ; special function bits
+ 160 ;--------------------------------------------------------
+ 161 .area RSEG (DATA)
+ 0080 162 G$P0_0$0$0 == 0x0080
+ 0080 163 _P0_0 = 0x0080
+ 0081 164 G$P0_1$0$0 == 0x0081
+ 0081 165 _P0_1 = 0x0081
+ 0082 166 G$P0_2$0$0 == 0x0082
+ 0082 167 _P0_2 = 0x0082
+ 0083 168 G$P0_3$0$0 == 0x0083
+ 0083 169 _P0_3 = 0x0083
+ 0084 170 G$P0_4$0$0 == 0x0084
+ 0084 171 _P0_4 = 0x0084
+ 0085 172 G$P0_5$0$0 == 0x0085
+ 0085 173 _P0_5 = 0x0085
+ 0086 174 G$P0_6$0$0 == 0x0086
+ 0086 175 _P0_6 = 0x0086
+ 0087 176 G$P0_7$0$0 == 0x0087
+ 0087 177 _P0_7 = 0x0087
+ 0088 178 G$IT0$0$0 == 0x0088
+ 0088 179 _IT0 = 0x0088
+ 0089 180 G$IE0$0$0 == 0x0089
+ 0089 181 _IE0 = 0x0089
+ 008A 182 G$IT1$0$0 == 0x008a
+ 008A 183 _IT1 = 0x008a
+ 008B 184 G$IE1$0$0 == 0x008b
+ 008B 185 _IE1 = 0x008b
+ 008C 186 G$TR0$0$0 == 0x008c
+ 008C 187 _TR0 = 0x008c
+ 008D 188 G$TF0$0$0 == 0x008d
+ 008D 189 _TF0 = 0x008d
+ 008E 190 G$TR1$0$0 == 0x008e
+ 008E 191 _TR1 = 0x008e
+ 008F 192 G$TF1$0$0 == 0x008f
+ 008F 193 _TF1 = 0x008f
+ 0090 194 G$P1_0$0$0 == 0x0090
+ 0090 195 _P1_0 = 0x0090
+ 0091 196 G$P1_1$0$0 == 0x0091
+ 0091 197 _P1_1 = 0x0091
+ 0092 198 G$P1_2$0$0 == 0x0092
+ 0092 199 _P1_2 = 0x0092
+ 0093 200 G$P1_3$0$0 == 0x0093
+ 0093 201 _P1_3 = 0x0093
+ 0094 202 G$P1_4$0$0 == 0x0094
+ 0094 203 _P1_4 = 0x0094
+ 0095 204 G$P1_5$0$0 == 0x0095
+ 0095 205 _P1_5 = 0x0095
+ 0096 206 G$P1_6$0$0 == 0x0096
+ 0096 207 _P1_6 = 0x0096
+ 0097 208 G$P1_7$0$0 == 0x0097
+ 0097 209 _P1_7 = 0x0097
+ 0098 210 G$RI$0$0 == 0x0098
+ 0098 211 _RI = 0x0098
+ 0099 212 G$TI$0$0 == 0x0099
+ 0099 213 _TI = 0x0099
+ 009A 214 G$RB8$0$0 == 0x009a
+ 009A 215 _RB8 = 0x009a
+ 009B 216 G$TB8$0$0 == 0x009b
+ 009B 217 _TB8 = 0x009b
+ 009C 218 G$REN$0$0 == 0x009c
+ 009C 219 _REN = 0x009c
+ 009D 220 G$SM2$0$0 == 0x009d
+ 009D 221 _SM2 = 0x009d
+ 009E 222 G$SM1$0$0 == 0x009e
+ 009E 223 _SM1 = 0x009e
+ 009F 224 G$SM0$0$0 == 0x009f
+ 009F 225 _SM0 = 0x009f
+ 00A0 226 G$P2_0$0$0 == 0x00a0
+ 00A0 227 _P2_0 = 0x00a0
+ 00A1 228 G$P2_1$0$0 == 0x00a1
+ 00A1 229 _P2_1 = 0x00a1
+ 00A2 230 G$P2_2$0$0 == 0x00a2
+ 00A2 231 _P2_2 = 0x00a2
+ 00A3 232 G$P2_3$0$0 == 0x00a3
+ 00A3 233 _P2_3 = 0x00a3
+ 00A4 234 G$P2_4$0$0 == 0x00a4
+ 00A4 235 _P2_4 = 0x00a4
+ 00A5 236 G$P2_5$0$0 == 0x00a5
+ 00A5 237 _P2_5 = 0x00a5
+ 00A6 238 G$P2_6$0$0 == 0x00a6
+ 00A6 239 _P2_6 = 0x00a6
+ 00A7 240 G$P2_7$0$0 == 0x00a7
+ 00A7 241 _P2_7 = 0x00a7
+ 00A8 242 G$EX0$0$0 == 0x00a8
+ 00A8 243 _EX0 = 0x00a8
+ 00A9 244 G$ET0$0$0 == 0x00a9
+ 00A9 245 _ET0 = 0x00a9
+ 00AA 246 G$EX1$0$0 == 0x00aa
+ 00AA 247 _EX1 = 0x00aa
+ 00AB 248 G$ET1$0$0 == 0x00ab
+ 00AB 249 _ET1 = 0x00ab
+ 00AC 250 G$ES$0$0 == 0x00ac
+ 00AC 251 _ES = 0x00ac
+ 00AF 252 G$EA$0$0 == 0x00af
+ 00AF 253 _EA = 0x00af
+ 00B0 254 G$P3_0$0$0 == 0x00b0
+ 00B0 255 _P3_0 = 0x00b0
+ 00B1 256 G$P3_1$0$0 == 0x00b1
+ 00B1 257 _P3_1 = 0x00b1
+ 00B2 258 G$P3_2$0$0 == 0x00b2
+ 00B2 259 _P3_2 = 0x00b2
+ 00B3 260 G$P3_3$0$0 == 0x00b3
+ 00B3 261 _P3_3 = 0x00b3
+ 00B4 262 G$P3_4$0$0 == 0x00b4
+ 00B4 263 _P3_4 = 0x00b4
+ 00B5 264 G$P3_5$0$0 == 0x00b5
+ 00B5 265 _P3_5 = 0x00b5
+ 00B6 266 G$P3_6$0$0 == 0x00b6
+ 00B6 267 _P3_6 = 0x00b6
+ 00B7 268 G$P3_7$0$0 == 0x00b7
+ 00B7 269 _P3_7 = 0x00b7
+ 00B0 270 G$RXD$0$0 == 0x00b0
+ 00B0 271 _RXD = 0x00b0
+ 00B1 272 G$TXD$0$0 == 0x00b1
+ 00B1 273 _TXD = 0x00b1
+ 00B2 274 G$INT0$0$0 == 0x00b2
+ 00B2 275 _INT0 = 0x00b2
+ 00B3 276 G$INT1$0$0 == 0x00b3
+ 00B3 277 _INT1 = 0x00b3
+ 00B4 278 G$T0$0$0 == 0x00b4
+ 00B4 279 _T0 = 0x00b4
+ 00B5 280 G$T1$0$0 == 0x00b5
+ 00B5 281 _T1 = 0x00b5
+ 00B6 282 G$WR$0$0 == 0x00b6
+ 00B6 283 _WR = 0x00b6
+ 00B7 284 G$RD$0$0 == 0x00b7
+ 00B7 285 _RD = 0x00b7
+ 00B8 286 G$PX0$0$0 == 0x00b8
+ 00B8 287 _PX0 = 0x00b8
+ 00B9 288 G$PT0$0$0 == 0x00b9
+ 00B9 289 _PT0 = 0x00b9
+ 00BA 290 G$PX1$0$0 == 0x00ba
+ 00BA 291 _PX1 = 0x00ba
+ 00BB 292 G$PT1$0$0 == 0x00bb
+ 00BB 293 _PT1 = 0x00bb
+ 00BC 294 G$PS$0$0 == 0x00bc
+ 00BC 295 _PS = 0x00bc
+ 00D0 296 G$P$0$0 == 0x00d0
+ 00D0 297 _P = 0x00d0
+ 00D1 298 G$FL$0$0 == 0x00d1
+ 00D1 299 _FL = 0x00d1
+ 00D2 300 G$OV$0$0 == 0x00d2
+ 00D2 301 _OV = 0x00d2
+ 00D3 302 G$RS0$0$0 == 0x00d3
+ 00D3 303 _RS0 = 0x00d3
+ 00D4 304 G$RS1$0$0 == 0x00d4
+ 00D4 305 _RS1 = 0x00d4
+ 00D5 306 G$F0$0$0 == 0x00d5
+ 00D5 307 _F0 = 0x00d5
+ 00D6 308 G$AC$0$0 == 0x00d6
+ 00D6 309 _AC = 0x00d6
+ 00D7 310 G$CY$0$0 == 0x00d7
+ 00D7 311 _CY = 0x00d7
+ 312 ;--------------------------------------------------------
+ 313 ; overlayable register banks
+ 314 ;--------------------------------------------------------
+ 315 .area REG_BANK_0 (REL,OVR,DATA)
+ 0000 316 .ds 8
+ 317 ;--------------------------------------------------------
+ 318 ; internal ram data
+ 319 ;--------------------------------------------------------
+ 320 .area DSEG (DATA)
+ 321 ;--------------------------------------------------------
+ 322 ; overlayable items in internal ram
+ 323 ;--------------------------------------------------------
+ 324 .area OSEG (OVR,DATA)
+ 325 ;--------------------------------------------------------
+ 326 ; Stack segment in internal ram
+ 327 ;--------------------------------------------------------
+ 328 .area SSEG (DATA)
+ 0008 329 __start__stack:
+ 0008 330 .ds 1
+ 331
+ 332 ;--------------------------------------------------------
+ 333 ; indirectly addressable internal ram data
+ 334 ;--------------------------------------------------------
+ 335 .area ISEG (DATA)
+ 336 ;--------------------------------------------------------
+ 337 ; absolute internal ram data
+ 338 ;--------------------------------------------------------
+ 339 .area IABS (ABS,DATA)
+ 340 .area IABS (ABS,DATA)
+ 341 ;--------------------------------------------------------
+ 342 ; bit data
+ 343 ;--------------------------------------------------------
+ 344 .area BSEG (BIT)
+ 345 ;--------------------------------------------------------
+ 346 ; paged external ram data
+ 347 ;--------------------------------------------------------
+ 348 .area PSEG (PAG,XDATA)
+ 349 ;--------------------------------------------------------
+ 350 ; external ram data
+ 351 ;--------------------------------------------------------
+ 352 .area XSEG (XDATA)
+ 353 ;--------------------------------------------------------
+ 354 ; absolute external ram data
+ 355 ;--------------------------------------------------------
+ 356 .area XABS (ABS,XDATA)
+ 357 ;--------------------------------------------------------
+ 358 ; external initialized ram data
+ 359 ;--------------------------------------------------------
+ 360 .area XISEG (XDATA)
+ 361 .area HOME (CODE)
+ 362 .area GSINIT0 (CODE)
+ 363 .area GSINIT1 (CODE)
+ 364 .area GSINIT2 (CODE)
+ 365 .area GSINIT3 (CODE)
+ 366 .area GSINIT4 (CODE)
+ 367 .area GSINIT5 (CODE)
+ 368 .area GSINIT (CODE)
+ 369 .area GSFINAL (CODE)
+ 370 .area CSEG (CODE)
+ 371 ;--------------------------------------------------------
+ 372 ; interrupt vector
+ 373 ;--------------------------------------------------------
+ 374 .area HOME (CODE)
+ 0000 375 __interrupt_vect:
+ 0000 02 00 08 376 ljmp __sdcc_gsinit_startup
+ 377 ;--------------------------------------------------------
+ 378 ; global & static initialisations
+ 379 ;--------------------------------------------------------
+ 380 .area HOME (CODE)
+ 381 .area GSINIT (CODE)
+ 382 .area GSFINAL (CODE)
+ 383 .area GSINIT (CODE)
+ 384 .globl __sdcc_gsinit_startup
+ 385 .globl __sdcc_program_startup
+ 386 .globl __start__stack
+ 387 .globl __mcs51_genXINIT
+ 388 .globl __mcs51_genXRAMCLEAR
+ 389 .globl __mcs51_genRAMCLEAR
+ 390 .area GSFINAL (CODE)
+ 0061 02 00 03 391 ljmp __sdcc_program_startup
+ 392 ;--------------------------------------------------------
+ 393 ; Home
+ 394 ;--------------------------------------------------------
+ 395 .area HOME (CODE)
+ 396 .area HOME (CODE)
+ 0003 397 __sdcc_program_startup:
+ 0003 12 00 64 398 lcall _main
+ 399 ; return from main will lock up
+ 0006 80 FE 400 sjmp .
+ 401 ;--------------------------------------------------------
+ 402 ; code
+ 403 ;--------------------------------------------------------
+ 404 .area CSEG (CODE)
+ 405 ;------------------------------------------------------------
+ 406 ;Allocation info for local variables in function 'main'
+ 407 ;------------------------------------------------------------
+ 408 ;i Allocated to registers r2 r3
+ 409 ;------------------------------------------------------------
+ 0000 410 G$main$0$0 ==.
+ 0000 411 C$ledmatrix.c$27$0$0 ==.
+ 412 ; ledmatrix.c:27: int main()
+ 413 ; -----------------------------------------
+ 414 ; function main
+ 415 ; -----------------------------------------
+ 0064 416 _main:
+ 0002 417 ar2 = 0x02
+ 0003 418 ar3 = 0x03
+ 0004 419 ar4 = 0x04
+ 0005 420 ar5 = 0x05
+ 0006 421 ar6 = 0x06
+ 0007 422 ar7 = 0x07
+ 0000 423 ar0 = 0x00
+ 0001 424 ar1 = 0x01
+ 0000 425 C$ledmatrix.c$30$1$1 ==.
+ 426 ; ledmatrix.c:30: while(1) {
+ 0064 427 00102$:
+ 0000 428 C$ledmatrix.c$31$2$2 ==.
+ 429 ; ledmatrix.c:31: for(i=0; i<8; i++) {
+ 0064 7A 00 430 mov r2,#0x00
+ 0066 7B 00 431 mov r3,#0x00
+ 0068 432 00104$:
+ 0068 C3 433 clr c
+ 0069 EA 434 mov a,r2
+ 006A 94 08 435 subb a,#0x08
+ 006C EB 436 mov a,r3
+ 006D 64 80 437 xrl a,#0x80
+ 006F 94 80 438 subb a,#0x80
+ 0071 50 F1 439 jnc 00102$
+ 000F 440 C$ledmatrix.c$32$3$3 ==.
+ 441 ; ledmatrix.c:32: P1 = 0xff;
+ 0073 75 90 FF 442 mov _P1,#0xFF
+ 0012 443 C$ledmatrix.c$33$3$3 ==.
+ 444 ; ledmatrix.c:33: P0 = image[i];
+ 0076 EA 445 mov a,r2
+ 0077 24 A7 446 add a,#_image
+ 0079 F5 82 447 mov dpl,a
+ 007B EB 448 mov a,r3
+ 007C 34 00 449 addc a,#(_image >> 8)
+ 007E F5 83 450 mov dph,a
+ 0080 E4 451 clr a
+ 0081 93 452 movc a,@a+dptr
+ 0082 F5 80 453 mov _P0,a
+ 0020 454 C$ledmatrix.c$34$3$3 ==.
+ 455 ; ledmatrix.c:34: P1 = (1 << i) ^ 255;
+ 0084 8A F0 456 mov b,r2
+ 0086 05 F0 457 inc b
+ 0088 7C 01 458 mov r4,#0x01
+ 008A 7D 00 459 mov r5,#0x00
+ 008C 80 06 460 sjmp 00115$
+ 008E 461 00114$:
+ 008E EC 462 mov a,r4
+ 008F 2C 463 add a,r4
+ 0090 FC 464 mov r4,a
+ 0091 ED 465 mov a,r5
+ 0092 33 466 rlc a
+ 0093 FD 467 mov r5,a
+ 0094 468 00115$:
+ 0094 D5 F0 F7 469 djnz b,00114$
+ 0097 74 FF 470 mov a,#0xFF
+ 0099 6C 471 xrl a,r4
+ 009A F5 90 472 mov _P1,a
+ 0038 473 C$ledmatrix.c$31$2$2 ==.
+ 474 ; ledmatrix.c:31: for(i=0; i<8; i++) {
+ 009C 0A 475 inc r2
+ 009D BA 00 C8 476 cjne r2,#0x00,00104$
+ 00A0 0B 477 inc r3
+ 003D 478 C$ledmatrix.c$37$1$1 ==.
+ 003D 479 XG$main$0$0 ==.
+ 00A1 80 C5 480 sjmp 00104$
+ 481 .area CSEG (CODE)
+ 482 .area CONST (CODE)
+ 0000 483 Fledmatrix$image$0$0 == .
+ 00A7 484 _image:
+ 00A7 B1 485 .db #0xB1
+ 00A8 9D 486 .db #0x9D
+ 00A9 BD 487 .db #0xBD
+ 00AA B1 488 .db #0xB1
+ 00AB B7 489 .db #0xB7
+ 00AC B7 490 .db #0xB7
+ 00AD 11 491 .db #0x11
+ 00AE FF 492 .db #0xFF
+ 493 .area XINIT (CODE)
+ 494 .area CABS (ABS,CODE)
diff --git a/demo/ledmatrix.sym b/demo/ledmatrix.sym
new file mode 100644
index 0000000..e61476a
--- /dev/null
+++ b/demo/ledmatrix.sym
@@ -0,0 +1,634 @@
+ ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1.
+
+Symbol Table
+
+ A 00D6
+ D A$ledmatrix$376 0000 GR
+ 15 A$ledmatrix$391 0000 GR
+ D A$ledmatrix$398 0003 GR
+ D A$ledmatrix$400 0006 GR
+ 16 A$ledmatrix$430 0000 GR
+ 16 A$ledmatrix$431 0002 GR
+ 16 A$ledmatrix$433 0004 GR
+ 16 A$ledmatrix$434 0005 GR
+ 16 A$ledmatrix$435 0006 GR
+ 16 A$ledmatrix$436 0008 GR
+ 16 A$ledmatrix$437 0009 GR
+ 16 A$ledmatrix$438 000B GR
+ 16 A$ledmatrix$439 000D GR
+ 16 A$ledmatrix$442 000F GR
+ 16 A$ledmatrix$445 0012 GR
+ 16 A$ledmatrix$446 0013 GR
+ 16 A$ledmatrix$447 0015 GR
+ 16 A$ledmatrix$448 0017 GR
+ 16 A$ledmatrix$449 0018 GR
+ 16 A$ledmatrix$450 001A GR
+ 16 A$ledmatrix$451 001C GR
+ 16 A$ledmatrix$452 001D GR
+ 16 A$ledmatrix$453 001E GR
+ 16 A$ledmatrix$456 0020 GR
+ 16 A$ledmatrix$457 0022 GR
+ 16 A$ledmatrix$458 0024 GR
+ 16 A$ledmatrix$459 0026 GR
+ 16 A$ledmatrix$460 0028 GR
+ 16 A$ledmatrix$462 002A GR
+ 16 A$ledmatrix$463 002B GR
+ 16 A$ledmatrix$464 002C GR
+ 16 A$ledmatrix$465 002D GR
+ 16 A$ledmatrix$466 002E GR
+ 16 A$ledmatrix$467 002F GR
+ 16 A$ledmatrix$469 0030 GR
+ 16 A$ledmatrix$470 0033 GR
+ 16 A$ledmatrix$471 0035 GR
+ 16 A$ledmatrix$472 0036 GR
+ 16 A$ledmatrix$475 0038 GR
+ 16 A$ledmatrix$476 0039 GR
+ 16 A$ledmatrix$477 003C GR
+ 16 A$ledmatrix$480 003D GR
+ AC 00D6
+ ACC 00E0
+ ACC.0 00E0
+ ACC.1 00E1
+ ACC.2 00E2
+ ACC.3 00E3
+ ACC.4 00E4
+ ACC.5 00E5
+ ACC.6 00E6
+ ACC.7 00E7
+ B 00F0
+ B.0 00F0
+ B.1 00F1
+ B.2 00F2
+ B.3 00F3
+ B.4 00F4
+ B.5 00F5
+ B.6 00F6
+ B.7 00F7
+ 16 C$ledmatrix.c$27$0$0 = 0000 GR
+ 16 C$ledmatrix.c$30$1$1 = 0000 GR
+ 16 C$ledmatrix.c$31$2$2 = 0038 GR
+ 16 C$ledmatrix.c$32$3$3 = 000F GR
+ 16 C$ledmatrix.c$33$3$3 = 0012 GR
+ 16 C$ledmatrix.c$34$3$3 = 0020 GR
+ 16 C$ledmatrix.c$37$1$1 = 003D GR
+ CPRL2 00C8
+ CT2 00C9
+ CY 00D7
+ DPH 0083
+ DPL 0082
+ EA 00AF
+ ES 00AC
+ ET0 00A9
+ ET1 00AB
+ ET2 00AD
+ EX0 00A8
+ EX1 00AA
+ EXEN2 00CB
+ EXF2 00CE
+ F0 00D5
+ 17 Fledmatrix$image$0$0 = 0000 GR
+ G$A$0$0 = 00E0 G
+ G$AC$0$0 = 00D6 G
+ G$ACC$0$0 = 00E0 G
+ G$B$0$0 = 00F0 G
+ G$CY$0$0 = 00D7 G
+ G$DPH$0$0 = 0083 G
+ G$DPL$0$0 = 0082 G
+ G$EA$0$0 = 00AF G
+ G$ES$0$0 = 00AC G
+ G$ET0$0$0 = 00A9 G
+ G$ET1$0$0 = 00AB G
+ G$EX0$0$0 = 00A8 G
+ G$EX1$0$0 = 00AA G
+ G$F0$0$0 = 00D5 G
+ G$FL$0$0 = 00D1 G
+ G$IE$0$0 = 00A8 G
+ G$IE0$0$0 = 0089 G
+ G$IE1$0$0 = 008B G
+ G$INT0$0$0 = 00B2 G
+ G$INT1$0$0 = 00B3 G
+ G$IP$0$0 = 00B8 G
+ G$IT0$0$0 = 0088 G
+ G$IT1$0$0 = 008A G
+ G$OV$0$0 = 00D2 G
+ G$P$0$0 = 00D0 G
+ G$P0$0$0 = 0080 G
+ G$P0_0$0$0 = 0080 G
+ G$P0_1$0$0 = 0081 G
+ G$P0_2$0$0 = 0082 G
+ G$P0_3$0$0 = 0083 G
+ G$P0_4$0$0 = 0084 G
+ G$P0_5$0$0 = 0085 G
+ G$P0_6$0$0 = 0086 G
+ G$P0_7$0$0 = 0087 G
+ G$P1$0$0 = 0090 G
+ G$P1_0$0$0 = 0090 G
+ G$P1_1$0$0 = 0091 G
+ G$P1_2$0$0 = 0092 G
+ G$P1_3$0$0 = 0093 G
+ G$P1_4$0$0 = 0094 G
+ G$P1_5$0$0 = 0095 G
+ G$P1_6$0$0 = 0096 G
+ G$P1_7$0$0 = 0097 G
+ G$P2$0$0 = 00A0 G
+ G$P2_0$0$0 = 00A0 G
+ G$P2_1$0$0 = 00A1 G
+ G$P2_2$0$0 = 00A2 G
+ G$P2_3$0$0 = 00A3 G
+ G$P2_4$0$0 = 00A4 G
+ G$P2_5$0$0 = 00A5 G
+ G$P2_6$0$0 = 00A6 G
+ G$P2_7$0$0 = 00A7 G
+ G$P3$0$0 = 00B0 G
+ G$P3_0$0$0 = 00B0 G
+ G$P3_1$0$0 = 00B1 G
+ G$P3_2$0$0 = 00B2 G
+ G$P3_3$0$0 = 00B3 G
+ G$P3_4$0$0 = 00B4 G
+ G$P3_5$0$0 = 00B5 G
+ G$P3_6$0$0 = 00B6 G
+ G$P3_7$0$0 = 00B7 G
+ G$PCON$0$0 = 0087 G
+ G$PS$0$0 = 00BC G
+ G$PSW$0$0 = 00D0 G
+ G$PT0$0$0 = 00B9 G
+ G$PT1$0$0 = 00BB G
+ G$PX0$0$0 = 00B8 G
+ G$PX1$0$0 = 00BA G
+ G$RB8$0$0 = 009A G
+ G$RD$0$0 = 00B7 G
+ G$REN$0$0 = 009C G
+ G$RI$0$0 = 0098 G
+ G$RS0$0$0 = 00D3 G
+ G$RS1$0$0 = 00D4 G
+ G$RXD$0$0 = 00B0 G
+ G$SBUF$0$0 = 0099 G
+ G$SCON$0$0 = 0098 G
+ G$SM0$0$0 = 009F G
+ G$SM1$0$0 = 009E G
+ G$SM2$0$0 = 009D G
+ G$SP$0$0 = 0081 G
+ G$T0$0$0 = 00B4 G
+ G$T1$0$0 = 00B5 G
+ G$TB8$0$0 = 009B G
+ G$TCON$0$0 = 0088 G
+ G$TF0$0$0 = 008D G
+ G$TF1$0$0 = 008F G
+ G$TH0$0$0 = 008C G
+ G$TH1$0$0 = 008D G
+ G$TI$0$0 = 0099 G
+ G$TL0$0$0 = 008A G
+ G$TL1$0$0 = 008B G
+ G$TMOD$0$0 = 0089 G
+ G$TR0$0$0 = 008C G
+ G$TR1$0$0 = 008E G
+ G$TXD$0$0 = 00B1 G
+ G$WR$0$0 = 00B6 G
+ 16 G$main$0$0 = 0000 GR
+ IE 00A8
+ IE.0 00A8
+ IE.1 00A9
+ IE.2 00AA
+ IE.3 00AB
+ IE.4 00AC
+ IE.5 00AD
+ IE.7 00AF
+ IE0 0089
+ IE1 008B
+ INT0 00B2
+ INT1 00B3
+ IP 00B8
+ IP.0 00B8
+ IP.1 00B9
+ IP.2 00BA
+ IP.3 00BB
+ IP.4 00BC
+ IP.5 00BD
+ IT0 0088
+ IT1 008A
+ OV 00D2
+ P 00D0
+ P0 0080
+ P0.0 0080
+ P0.1 0081
+ P0.2 0082
+ P0.3 0083
+ P0.4 0084
+ P0.5 0085
+ P0.6 0086
+ P0.7 0087
+ P1 0090
+ P1.0 0090
+ P1.1 0091
+ P1.2 0092
+ P1.3 0093
+ P1.4 0094
+ P1.5 0095
+ P1.6 0096
+ P1.7 0097
+ P2 00A0
+ P2.0 00A0
+ P2.1 00A1
+ P2.2 00A2
+ P2.3 00A3
+ P2.4 00A4
+ P2.5 00A5
+ P2.6 00A6
+ P2.7 00A7
+ P3 00B0
+ P3.0 00B0
+ P3.1 00B1
+ P3.2 00B2
+ P3.3 00B3
+ P3.4 00B4
+ P3.5 00B5
+ P3.6 00B6
+ P3.7 00B7
+ PCON 0087
+ PS 00BC
+ PSW 00D0
+ PSW.0 00D0
+ PSW.1 00D1
+ PSW.2 00D2
+ PSW.3 00D3
+ PSW.4 00D4
+ PSW.5 00D5
+ PSW.6 00D6
+ PSW.7 00D7
+ PT0 00B9
+ PT1 00BB
+ PT2 00BD
+ PX0 00B8
+ PX1 00BA
+ RB8 009A
+ RCAP2H 00CB
+ RCAP2L 00CA
+ RCLK 00CD
+ REN 009C
+ RI 0098
+ RS0 00D3
+ RS1 00D4
+ RXD 00B0
+ SBUF 0099
+ SCON 0098
+ SCON.0 0098
+ SCON.1 0099
+ SCON.2 009A
+ SCON.3 009B
+ SCON.4 009C
+ SCON.5 009D
+ SCON.6 009E
+ SCON.7 009F
+ SM0 009F
+ SM1 009E
+ SM2 009D
+ SP 0081
+ T2CON 00C8
+ T2CON.0 00C8
+ T2CON.1 00C9
+ T2CON.2 00CA
+ T2CON.3 00CB
+ T2CON.4 00CC
+ T2CON.5 00CD
+ T2CON.6 00CE
+ T2CON.7 00CF
+ TB8 009B
+ TCLK 00CC
+ TCON 0088
+ TCON.0 0088
+ TCON.1 0089
+ TCON.2 008A
+ TCON.3 008B
+ TCON.4 008C
+ TCON.5 008D
+ TCON.6 008E
+ TCON.7 008F
+ TF0 008D
+ TF1 008F
+ TF2 00CF
+ TH0 008C
+ TH1 008D
+ TH2 00CD
+ TI 0099
+ TL0 008A
+ TL1 008B
+ TL2 00CC
+ TMOD 0089
+ TR0 008C
+ TR1 008E
+ TR2 00CA
+ TXD 00B1
+ 16 XG$main$0$0 = 003D GR
+ _A = 00E0 G
+ _AC = 00D6 G
+ _ACC = 00E0 G
+ _B = 00F0 G
+ _CY = 00D7 G
+ _DPH = 0083 G
+ _DPL = 0082 G
+ _EA = 00AF G
+ _ES = 00AC G
+ _ET0 = 00A9 G
+ _ET1 = 00AB G
+ _EX0 = 00A8 G
+ _EX1 = 00AA G
+ _F0 = 00D5 G
+ _FL = 00D1 G
+ _IE = 00A8 G
+ _IE0 = 0089 G
+ _IE1 = 008B G
+ _INT0 = 00B2 G
+ _INT1 = 00B3 G
+ _IP = 00B8 G
+ _IT0 = 0088 G
+ _IT1 = 008A G
+ _OV = 00D2 G
+ _P = 00D0 G
+ _P0 = 0080 G
+ _P0_0 = 0080 G
+ _P0_1 = 0081 G
+ _P0_2 = 0082 G
+ _P0_3 = 0083 G
+ _P0_4 = 0084 G
+ _P0_5 = 0085 G
+ _P0_6 = 0086 G
+ _P0_7 = 0087 G
+ _P1 = 0090 G
+ _P1_0 = 0090 G
+ _P1_1 = 0091 G
+ _P1_2 = 0092 G
+ _P1_3 = 0093 G
+ _P1_4 = 0094 G
+ _P1_5 = 0095 G
+ _P1_6 = 0096 G
+ _P1_7 = 0097 G
+ _P2 = 00A0 G
+ _P2_0 = 00A0 G
+ _P2_1 = 00A1 G
+ _P2_2 = 00A2 G
+ _P2_3 = 00A3 G
+ _P2_4 = 00A4 G
+ _P2_5 = 00A5 G
+ _P2_6 = 00A6 G
+ _P2_7 = 00A7 G
+ _P3 = 00B0 G
+ _P3_0 = 00B0 G
+ _P3_1 = 00B1 G
+ _P3_2 = 00B2 G
+ _P3_3 = 00B3 G
+ _P3_4 = 00B4 G
+ _P3_5 = 00B5 G
+ _P3_6 = 00B6 G
+ _P3_7 = 00B7 G
+ _PCON = 0087 G
+ _PS = 00BC G
+ _PSW = 00D0 G
+ _PT0 = 00B9 G
+ _PT1 = 00BB G
+ _PX0 = 00B8 G
+ _PX1 = 00BA G
+ _RB8 = 009A G
+ _RD = 00B7 G
+ _REN = 009C G
+ _RI = 0098 G
+ _RS0 = 00D3 G
+ _RS1 = 00D4 G
+ _RXD = 00B0 G
+ _SBUF = 0099 G
+ _SCON = 0098 G
+ _SM0 = 009F G
+ _SM1 = 009E G
+ _SM2 = 009D G
+ _SP = 0081 G
+ _T0 = 00B4 G
+ _T1 = 00B5 G
+ _TB8 = 009B G
+ _TCON = 0088 G
+ _TF0 = 008D G
+ _TF1 = 008F G
+ _TH0 = 008C G
+ _TH1 = 008D G
+ _TI = 0099 G
+ _TL0 = 008A G
+ _TL1 = 008B G
+ _TMOD = 0089 G
+ _TR0 = 008C G
+ _TR1 = 008E G
+ _TXD = 00B1 G
+ _WR = 00B6 G
+ D __interrupt_vect 0000 R
+ __mcs51_genRAMCLEAR **** GX
+ __mcs51_genXINIT **** GX
+ __mcs51_genXRAMCLEAR **** GX
+ __sdcc_gsinit_startup **** GX
+ D __sdcc_program_startup 0003 GR
+ 5 __start__stack 0000 GR
+ 17 _image 0000 R
+ 16 _main 0000 GR
+ a 00D6
+ ac 00D6
+ acc 00E0
+ acc.0 00E0
+ acc.1 00E1
+ acc.2 00E2
+ acc.3 00E3
+ acc.4 00E4
+ acc.5 00E5
+ acc.6 00E6
+ acc.7 00E7
+ ar0 = 0000
+ ar1 = 0001
+ ar2 = 0002
+ ar3 = 0003
+ ar4 = 0004
+ ar5 = 0005
+ ar6 = 0006
+ ar7 = 0007
+ b 00F0
+ b.0 00F0
+ b.1 00F1
+ b.2 00F2
+ b.3 00F3
+ b.4 00F4
+ b.5 00F5
+ b.6 00F6
+ b.7 00F7
+ cprl2 00C8
+ ct2 00C9
+ cy 00D7
+ dph 0083
+ dpl 0082
+ ea 00AF
+ es 00AC
+ et0 00A9
+ et1 00AB
+ et2 00AD
+ ex0 00A8
+ ex1 00AA
+ exen2 00CB
+ exf2 00CE
+ f0 00D5
+ ie 00A8
+ ie.0 00A8
+ ie.1 00A9
+ ie.2 00AA
+ ie.3 00AB
+ ie.4 00AC
+ ie.5 00AD
+ ie.7 00AF
+ ie0 0089
+ ie1 008B
+ int0 00B2
+ int1 00B3
+ ip 00B8
+ ip.0 00B8
+ ip.1 00B9
+ ip.2 00BA
+ ip.3 00BB
+ ip.4 00BC
+ ip.5 00BD
+ it0 0088
+ it1 008A
+ ov 00D2
+ p 00D0
+ p0 0080
+ p0.0 0080
+ p0.1 0081
+ p0.2 0082
+ p0.3 0083
+ p0.4 0084
+ p0.5 0085
+ p0.6 0086
+ p0.7 0087
+ p1 0090
+ p1.0 0090
+ p1.1 0091
+ p1.2 0092
+ p1.3 0093
+ p1.4 0094
+ p1.5 0095
+ p1.6 0096
+ p1.7 0097
+ p2 00A0
+ p2.0 00A0
+ p2.1 00A1
+ p2.2 00A2
+ p2.3 00A3
+ p2.4 00A4
+ p2.5 00A5
+ p2.6 00A6
+ p2.7 00A7
+ p3 00B0
+ p3.0 00B0
+ p3.1 00B1
+ p3.2 00B2
+ p3.3 00B3
+ p3.4 00B4
+ p3.5 00B5
+ p3.6 00B6
+ p3.7 00B7
+ pcon 0087
+ ps 00BC
+ psw 00D0
+ psw.0 00D0
+ psw.1 00D1
+ psw.2 00D2
+ psw.3 00D3
+ psw.4 00D4
+ psw.5 00D5
+ psw.6 00D6
+ psw.7 00D7
+ pt0 00B9
+ pt1 00BB
+ pt2 00BD
+ px0 00B8
+ px1 00BA
+ rb8 009A
+ rcap2h 00CB
+ rcap2l 00CA
+ rclk 00CD
+ ren 009C
+ ri 0098
+ rs0 00D3
+ rs1 00D4
+ rxd 00B0
+ sbuf 0099
+ scon 0098
+ scon.0 0098
+ scon.1 0099
+ scon.2 009A
+ scon.3 009B
+ scon.4 009C
+ scon.5 009D
+ scon.6 009E
+ scon.7 009F
+ sm0 009F
+ sm1 009E
+ sm2 009D
+ sp 0081
+ t2con 00C8
+ t2con.0 00C8
+ t2con.1 00C9
+ t2con.2 00CA
+ t2con.3 00CB
+ t2con.4 00CC
+ t2con.5 00CD
+ t2con.6 00CE
+ t2con.7 00CF
+ tb8 009B
+ tclk 00CC
+ tcon 0088
+ tcon.0 0088
+ tcon.1 0089
+ tcon.2 008A
+ tcon.3 008B
+ tcon.4 008C
+ tcon.5 008D
+ tcon.6 008E
+ tcon.7 008F
+ tf0 008D
+ tf1 008F
+ tf2 00CF
+ th0 008C
+ th1 008D
+ th2 00CD
+ ti 0099
+ tl0 008A
+ tl1 008B
+ tl2 00CC
+ tmod 0089
+ tr0 008C
+ tr1 008E
+ tr2 00CA
+ txd 00B1
+
+ ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2.
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 RSEG size 0 flags 0
+ 2 REG_BANK_0 size 8 flags 4
+ 3 DSEG size 0 flags 0
+ 4 OSEG size 0 flags 4
+ 5 SSEG size 1 flags 0
+ 6 ISEG size 0 flags 0
+ 7 IABS size 0 flags 8
+ 8 BSEG size 0 flags 80
+ 9 PSEG size 0 flags 50
+ A XSEG size 0 flags 40
+ B XABS size 0 flags 48
+ C XISEG size 0 flags 40
+ D HOME size 8 flags 20
+ E GSINIT0 size 0 flags 20
+ F GSINIT1 size 0 flags 20
+ 10 GSINIT2 size 0 flags 20
+ 11 GSINIT3 size 0 flags 20
+ 12 GSINIT4 size 0 flags 20
+ 13 GSINIT5 size 0 flags 20
+ 14 GSINIT size 0 flags 20
+ 15 GSFINAL size 3 flags 20
+ 16 CSEG size 3F flags 20
+ 17 CONST size 8 flags 20
+ 18 XINIT size 0 flags 20
+ 19 CABS size 0 flags 28
diff --git a/demo/ledmatrix.vhc b/demo/ledmatrix.vhc
new file mode 100644
index 0000000..4c8f25e
--- /dev/null
+++ b/demo/ledmatrix.vhc
@@ -0,0 +1,6 @@
+# MCU 8051 IDE: Virtual HW component configuration file
+# Date: 02/27/09
+# Project: Demo-project
+# Component: LED matrix
+
+LedMatrix {{C5 0 C6 0 C7 0 R0 1 R1 1 R2 1 R3 1 R4 1 R5 1 R6 1 R7 1 C0 0 C1 0 C2 0 C3 0 C4 0} {C5 2 C6 1 C7 0 R0 7 R1 6 R2 5 R3 4 R4 3 R5 2 R6 1 R7 0 C0 7 C1 6 C2 5 C3 4 C4 3} {} {Some user note ...} blue 500 {0 0}}
diff --git a/demo/mleddisplay.adf b/demo/mleddisplay.adf
new file mode 100644
index 0000000..f3c5764
--- /dev/null
+++ b/demo/mleddisplay.adf
@@ -0,0 +1,45 @@
+# Assembler debug file for MCU 8051 IDE v1.1
+# Used assembler: MCU 8051 IDE
+# Date: 03/02/09
+BFC1B21D558BFAE2B1E43162DAEFE347 "mleddisplay.asm"
+0 37 0 2 0 37
+0 51 3 6
+0 52 4 182 10 9
+0 54 7 118 0
+0 55 9 8
+0 56 10 184 36 1
+0 57 13 34
+0 58 14 17 3
+0 60 16 34
+0 72 17 24
+0 73 18 229 240
+0 74 20 3
+0 75 21 245 240
+0 79 23 230
+0 80 24 147
+0 83 25 117 176 255
+0 84 28 245 144
+0 85 30 133 240 176
+0 88 33 184 32 237
+0 89 36 34
+0 96 37 117 32 0
+0 97 40 117 33 0
+0 98 43 117 34 0
+0 99 46 117 35 0
+0 102 49 117 240 238
+0 104 52 144 0 65
+0 112 55 120 36
+0 113 57 17 17
+0 116 59 120 32
+0 117 61 17 3
+0 120 63 1 55
+0 21 65 192
+0 22 66 249
+0 23 67 164
+0 24 68 176
+0 25 69 153
+0 26 70 146
+0 27 71 130
+0 28 72 248
+0 29 73 128
+0 30 74 144 \ No newline at end of file
diff --git a/demo/mleddisplay.asm b/demo/mleddisplay.asm
new file mode 100644
index 0000000..8e2add9
--- /dev/null
+++ b/demo/mleddisplay.asm
@@ -0,0 +1,125 @@
+; Demonstration code for MCU 8051 IDE
+;
+; Load virtual HW from "mleddisplay.vhc"
+; and press F2 and F6
+;
+; It should increment 4 digit number displayed
+; on multiplexed LED display
+
+
+; -----------------------------------------------
+; CONSTANTS
+; -----------------------------------------------
+
+data_ptr data 20h ; Number to display
+data_len equ 4h ; Number of digits
+
+;; Codes for 8-segment LED display
+ ; They can be easily determinated with
+ ; 8-segment editor ( [Main menu] - >
+ ; [Utilities] -> [8-segment editor] )
+numbers:db 11000000b ; 0
+ db 11111001b ; 1
+ db 10100100b ; 2
+ db 10110000b ; 3
+ db 10011001b ; 4
+ db 10010010b ; 5
+ db 10000010b ; 6
+ db 11111000b ; 7
+ db 10000000b ; 8
+ db 10010000b ; 9
+
+; -----------------------------------------------
+; VECTORS
+; -----------------------------------------------
+ ; Reset vector
+ org 0
+ jmp start
+
+; -----------------------------------------------
+; SUBPROGRAMS
+; -----------------------------------------------
+
+;; Increment the number
+ ;
+ ; R0 must be set to data_ptr before call
+ ;
+ ; Affected registers: R0
+ ; Interrupts: None
+ ; Notes: Recursive subprogram
+inrement_number:
+ inc @R0
+ cjne @R0, #0Ah, inc_num_end
+
+ mov @R0, #0
+ inc R0
+ cjne R0, #data_ptr+data_len, $+4
+ ret
+ call inrement_number
+inc_num_end:
+ ret
+
+;; Display the number on the LED display
+ ;
+ ; DPTR must point to table numbers
+ ; R0 must contain (data_ptr+data_len)
+ ;
+ ; Affected registers: A, B, R0, P1, P3
+ ; Interrupts: None
+ ; Notes: Uses DPTR
+display_number:
+ ; Select digit to display
+ dec R0 ; In uC
+ mov A, B
+ rr A
+ mov B, A
+
+ ; Translate the digit to binary
+ ; representation for the LED display
+ mov A, @R0
+ movc A, @A+DPTR
+
+ ; Display the digit on the display
+ mov P3, #0ffh
+ mov P1, A
+ mov P3, B
+
+ ; Display next digit
+ cjne R0, #data_ptr, display_number
+ ret
+
+; -----------------------------------------------
+; PROGRAM START
+; -----------------------------------------------
+start:
+ ; Data to zeroes
+ mov data_ptr+0, #0h ; left-most
+ mov data_ptr+1, #0h
+ mov data_ptr+2, #0h
+ mov data_ptr+3, #0h ; right-most
+
+ ; Address 1st number on the display
+ mov B, #0EEh
+ ; Initialize DPTR (Data PoinTeR)
+ mov DPTR, #numbers
+
+; -----------------------------------------------
+; MAIN LOOP
+; -----------------------------------------------
+
+main:
+ ; Show the number on the LED display
+ mov R0, #data_ptr+data_len
+ call display_number
+
+ ; Increment the number
+ mov R0, #data_ptr
+ call inrement_number
+
+ ; Close main loop
+ jmp main
+
+; -----------------------------------------------
+; PROGRAM END
+; -----------------------------------------------
+ end
diff --git a/demo/mleddisplay.bin b/demo/mleddisplay.bin
new file mode 100644
index 0000000..18d8eb4
--- /dev/null
+++ b/demo/mleddisplay.bin
Binary files differ
diff --git a/demo/mleddisplay.hex b/demo/mleddisplay.hex
new file mode 100644
index 0000000..abf8563
--- /dev/null
+++ b/demo/mleddisplay.hex
@@ -0,0 +1,2 @@
+:4B00000002002506B60A09760008B824012211032218E5F003F5F0E69375B0FFF59085F0B0B820ED2275200075210075220075230075F0EE90004178241111782011030137C0F9A4B0999282F8809027
+:00000001FF \ No newline at end of file
diff --git a/demo/mleddisplay.lst b/demo/mleddisplay.lst
new file mode 100644
index 0000000..f87d046
--- /dev/null
+++ b/demo/mleddisplay.lst
@@ -0,0 +1,316 @@
+mleddisplay PAGE 1
+ 1 ; Demonstration code for MCU 8051 IDE
+ 2 ;
+ 3 ; Load virtual HW from "mleddisplay.vhc"
+ 4 ; and press F2 and F6
+ 5 ;
+ 6 ; It should increment 4 digit number displayed
+ 7 ; on multiplexed LED display
+ 8
+ 9
+ 10 ; -----------------------------------------------
+ 11 ; CONSTANTS
+ 12 ; -----------------------------------------------
+ 13
+ 0020 14 data_ptr data 20h ; Number to display
+ 0004 15 data_len equ 4h ; Number of digits
+ 16
+ 17 ;; Codes for 8-segment LED display
+ 18 ; They can be easily determinated with
+ 19 ; 8-segment editor ( [Main menu] - >
+ 20 ; [Utilities] -> [8-segment editor] )
+0041 C0 21 numbers:db 11000000b ; 0
+0042 F9 22 db 11111001b ; 1
+0043 A4 23 db 10100100b ; 2
+0044 B0 24 db 10110000b ; 3
+0045 99 25 db 10011001b ; 4
+0046 92 26 db 10010010b ; 5
+0047 82 27 db 10000010b ; 6
+0048 F8 28 db 11111000b ; 7
+0049 80 29 db 10000000b ; 8
+004A 90 30 db 10010000b ; 9
+ 31
+ 32 ; -----------------------------------------------
+ 33 ; VECTORS
+ 34 ; -----------------------------------------------
+ 35 ; Reset vector
+ 36 org 0
+0000 06 37 jmp start
+ 38
+ 39 ; -----------------------------------------------
+ 40 ; SUBPROGRAMS
+ 41 ; -----------------------------------------------
+ 42
+ 43 ;; Increment the number
+ 44 ;
+ 45 ; R0 must be set to data_ptr before call
+ 46 ;
+ 47 ; Affected registers: R0
+ 48 ; Interrupts: None
+ 49 ; Notes: Recursive subprogram
+ 50 inrement_number:
+0003 B60A09 51 inc @R0
+0004 7600 52 cjne @R0, #0Ah, inc_num_end
+ 53
+0007 08 54 mov @R0, #0
+0009 B82401 55 inc R0
+000A 22 56 cjne R0, #data_ptr+data_len, $+4
+ 57 ret
+000E 0137 58 call inrement_number
+ 59 inc_num_end:
+0010 7820 60 ret
+ 61
+ 62 ;; Display the number on the LED display
+ 63 ;
+ 64 ; DPTR must point to table numbers
+ 65 ; R0 must contain (data_ptr+data_len)
+ 66 ;
+ 67 ; Affected registers: A, B, R0, P1, P3
+ 68 ; Interrupts: None
+ 69 ; Notes: Uses DPTR
+ 70 display_number:
+ 71 ; Select digit to display
+0011 18 72 dec R0 ; In uC
+0012 E5F0 73 mov A, B
+0014 03 74 rr A
+0015 F5F0 75 mov B, A
+ 76
+ 77 ; Translate the digit to binary
+ 78 ; representation for the LED display
+0017 E6 79 mov A, @R0
+0018 93 80 movc A, @A+DPTR
+ 81
+ 82 ; Display the digit on the display
+0019 75B0FF 83 mov P3, #0ffh
+001C F590 84 mov P1, A
+001E 85F0B0 85 mov P3, B
+ 86
+ 87 ; Display next digit
+0021 B820ED 88 cjne R0, #data_ptr, display_number
+0024 22 89 ret
+ 90
+ 91 ; -----------------------------------------------
+ 92 ; PROGRAM START
+ 93 ; -----------------------------------------------
+ 94 start:
+ 95 ; Data to zeroes
+0025 752000 96 mov data_ptr+0, #0h ; left-most
+0028 752100 97 mov data_ptr+1, #0h
+002B 752200 98 mov data_ptr+2, #0h
+002E 752300 99 mov data_ptr+3, #0h ; right-most
+ 100
+ 101 ; Address 1st number on the display
+0031 75F0EE 102 mov B, #0EEh
+ 103 ; Initialize DPTR (Data PoinTeR)
+0034 900041 104 mov DPTR, #numbers
+ 105
+ 106 ; -----------------------------------------------
+ 107 ; MAIN LOOP
+ 108 ; -----------------------------------------------
+ 109
+ 110 main:
+ 111 ; Show the number on the LED display
+0037 7824 112 mov R0, #data_ptr+data_len
+ 113 call display_number
+ 114
+ 115 ; Increment the number
+ 116 mov R0, #data_ptr
+ 117 call inrement_number
+ 118
+ 119 ; Close main loop
+ 120 jmp main
+ 121
+ 122 ; -----------------------------------------------
+ 123 ; PROGRAM END
+ 124 ; -----------------------------------------------
+ 125 end
+ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS
+
+
+SYMBOL TABLE:
+AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
+ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED
+ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED
+ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED
+ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED
+ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED
+ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED
+AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
+AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
+B. . . . . . . . . . . . . . . . . . D ADDR 00F0H
+BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED
+BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED
+CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED
+CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED
+CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED
+CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED
+CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
+CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED
+CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
+CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED
+CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
+CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED
+CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED
+CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED
+CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED
+CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED
+CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED
+CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED
+CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED
+CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED
+CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED
+CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED
+CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED
+CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED
+CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED
+CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
+CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED
+CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
+CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED
+CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
+CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED
+CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
+CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
+DATA_LEN . . . . . . . . . . . . . . N NUMB 0004H NOT USED
+DATA_PTR . . . . . . . . . . . . . . D ADDR 0020H
+DISPLAY_NUMBER . . . . . . . . . . . C ADDR 0011H
+DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
+DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
+DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
+DPL. . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
+EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
+EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED
+EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
+ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
+ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
+ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
+ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED
+EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
+EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
+EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
+EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
+EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED
+EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED
+F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
+FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED
+IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
+IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
+INC_NUM_END. . . . . . . . . . . . . C ADDR 0010H
+INREMENT_NUMBER. . . . . . . . . . . C ADDR 0003H
+INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
+INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
+IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
+IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED
+IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
+IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED
+IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
+IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
+KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED
+KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED
+KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED
+MAIN . . . . . . . . . . . . . . . . C ADDR 0037H
+NUMBERS. . . . . . . . . . . . . . . C ADDR 0041H
+OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
+P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
+P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
+P1 . . . . . . . . . . . . . . . . . D ADDR 0090H
+P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED
+P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED
+P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
+P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H
+P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED
+P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
+P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED
+P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED
+P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED
+PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
+PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
+PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
+PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED
+PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
+PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
+PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
+PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
+PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
+RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
+RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
+RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
+RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
+RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
+REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
+RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED
+RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
+RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED
+RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED
+RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
+SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
+SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
+SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED
+SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
+SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
+SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED
+SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
+SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
+SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
+SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED
+SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED
+SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
+SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED
+SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
+SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
+SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED
+START. . . . . . . . . . . . . . . . C ADDR 0025H
+T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
+T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
+T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
+T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
+TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
+TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
+TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
+TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
+TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
+TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
+TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
+TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
+TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
+TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
+TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED
+TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED
+TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED
+TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED
+TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
+TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
+TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED
+TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED
+TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
+TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
+TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
+WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
+WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
+WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED \ No newline at end of file
diff --git a/demo/mleddisplay.vhw b/demo/mleddisplay.vhw
new file mode 100644
index 0000000..ecdf182
--- /dev/null
+++ b/demo/mleddisplay.vhw
@@ -0,0 +1,5 @@
+# MCU 8051 IDE: Virtual HW configuration file
+# Date: 05/10/2010
+# Project: Demo-project
+
+MultiplexedLedDisplay {{0 1 1 1 2 1 3 1 4 1 T0 3 5 1 T1 3 6 1 T2 3 7 1 T3 3} {0 7 1 6 2 5 3 4 4 3 T0 7 5 2 T1 6 6 1 T2 5 7 0 T3 4} 425x225+850+345 {Demo for "leddisplay.asm"} red 50 1}