--- /dev/null
+\r
+AVR files used in current config:\r
+=================================\r
+- touchscreen: 0026, HAS LP295x --> Nick's TSV3\r
+- customer display: 9850, NO LP295x --> CS64V0\r
+- printer: 9927, NO LP295x --> MT102V0\r
+- compactflash: 0233, NO LP295x --> CFLASHV1\r
+- motherboard: 0151 --> WPOV2\r
+\r
ucp < appinst.ucp\r
-copy uzidisk.dat f:\\r
+copy uzidisk.dat i:\\r
ucp < appinst.ucp\r
-copy uzidisk.dat e:\\r
+copy uzidisk.dat f:\\r
mkdir 90\r
chown 11 90\r
chgrp 101 90\r
+mkdir tsys\r
+chown 0 tsys\r
+chgrp 0 tsys\r
+cd /home/tsys\r
+get profile.tsys.sh .profile\r
+chmod 755 .profile\r
cd /lib\r
get liberror.txt\r
exit\r
--- /dev/null
+root b:\r
+cd /\r
+mkdir bin\r
+mkdir boot\r
+mkdir dev\r
+mkdir etc\r
+mkdir home\r
+mkdir lib\r
+mkdir mnt\r
+mkdir root\r
+mkdir tmp\r
+mkdir usr\r
+mkdir var\r
+cd /bin\r
+bget banked\align align\r
+chmod 755 align\r
+align align\r
+bget banked\cat cat\r
+chmod 755 cat\r
+align cat\r
+bget banked\chgrp chgrp\r
+chmod 755 chgrp\r
+align chgrp\r
+bget banked\chmod chmod\r
+chmod 755 chmod\r
+align chmod\r
+bget banked\chown chown\r
+chmod 755 chown\r
+align chown\r
+bget banked\cp cp\r
+chmod 755 cp\r
+align cp\r
+bget banked\echo echo\r
+chmod 755 echo\r
+align echo\r
+bget banked\fsck fsck\r
+chmod 755 fsck\r
+align fsck\r
+bget banked\init init\r
+chmod 755 init\r
+align init\r
+sln cp ln\r
+bget banked\login login\r
+chmod 755 login\r
+align login\r
+bget banked\ls ls\r
+chmod 755 ls\r
+align ls\r
+bget banked\mkdir mkdir\r
+chmod 755 mkdir\r
+align mkdir\r
+bget banked\more more\r
+chmod 755 more\r
+align more\r
+bget banked\mount mount\r
+chmod 755 mount\r
+align mount\r
+bget banked\msh msh\r
+chmod 755 msh\r
+align msh\r
+sln cp mv\r
+bget banked\reboot reboot\r
+chmod 755 reboot\r
+align reboot\r
+sln cp rm\r
+bget banked\rmdir rmdir\r
+chmod 755 rmdir\r
+align rmdir\r
+sln msh sh\r
+bget banked\ualign ualign\r
+chmod 755 ualign\r
+align ualign\r
+bget banked\umount umount\r
+chmod 755 umount\r
+align umount\r
+cd /boot\r
+bget kernel.bin\r
+align kernel.bin\r
+cd /dev\r
+umask 000\r
+mknod hd0 60666 0 0\r
+mknod hd1 60666 0 1\r
+mknod null 20666 1 0\r
+mknod zero 20666 2 0\r
+mknod kmem 20666 3 0\r
+mknod tty 20666 4 0\r
+mknod tty0 20666 4 1\r
+mknod tty1 20666 4 2\r
+mknod tty2 20666 4 3\r
+mknod tty3 20666 4 4\r
+mknod scale 20666 4 5\r
+mknod lcd0 20666 4 6\r
+mknod lcd1 20666 4 7\r
+mknod lpr0 20666 4 9\r
+umask 022\r
+sln tty0 cognitive\r
+sln tty1 barcode\r
+sln tty1 console\r
+sln tty2 atmodem\r
+sln tty3 apilan\r
+sln lpr0 printer\r
+cd /etc\r
+get group.txt group\r
+get passwd.txt passwd\r
+get mtab.txt mtab\r
+get fstab.txt fstab\r
+get inittab.txt inittab\r
+get profile.sh profile\r
+mkdir rc.d\r
+cd /etc/rc.d\r
+get sysinit.rc rc.sysinit\r
+chmod 755 rc.sysinit\r
+get runonce.rc rc.runonce\r
+chmod 755 rc.runonce\r
+cd /home\r
+mkdir downingn\r
+chown 60 downingn\r
+chgrp 100 downingn\r
+mkdir morsinkj\r
+chown 70 morsinkj\r
+chgrp 100 morsinkj\r
+mkdir buijsr\r
+chown 80 buijsr\r
+chgrp 100 buijsr\r
+mkdir 90\r
+chown 11 90\r
+chgrp 101 90\r
+mkdir tsys\r
+chown 0 tsys\r
+chgrp 0 tsys\r
+cd /home/tsys\r
+get profile.tsys.sh .profile\r
+chmod 755 .profile\r
+bget tsys\r
+chmod 755 tsys\r
+align tsys\r
+cd /lib\r
+get liberror.txt\r
+exit\r
--- /dev/null
+root b:\r
+cd /\r
+mkdir bin\r
+mkdir boot\r
+mkdir dev\r
+mkdir etc\r
+mkdir home\r
+mkdir lib\r
+mkdir mnt\r
+mkdir root\r
+mkdir tmp\r
+mkdir usr\r
+mkdir var\r
+cd /bin\r
+bget banked\align align\r
+chmod 755 align\r
+align align\r
+bget banked\cat cat\r
+chmod 755 cat\r
+align cat\r
+bget banked\chgrp chgrp\r
+chmod 755 chgrp\r
+align chgrp\r
+bget banked\chmod chmod\r
+chmod 755 chmod\r
+align chmod\r
+bget banked\chown chown\r
+chmod 755 chown\r
+align chown\r
+bget banked\cp cp\r
+chmod 755 cp\r
+align cp\r
+bget banked\echo echo\r
+chmod 755 echo\r
+align echo\r
+bget banked\fsck fsck\r
+chmod 755 fsck\r
+align fsck\r
+bget banked\init init\r
+chmod 755 init\r
+align init\r
+sln cp ln\r
+bget banked\login login\r
+chmod 755 login\r
+align login\r
+bget banked\ls ls\r
+chmod 755 ls\r
+align ls\r
+bget banked\mkdir mkdir\r
+chmod 755 mkdir\r
+align mkdir\r
+bget banked\more more\r
+chmod 755 more\r
+align more\r
+bget banked\mount mount\r
+chmod 755 mount\r
+align mount\r
+bget banked\msh msh\r
+chmod 755 msh\r
+align msh\r
+sln cp mv\r
+bget banked\reboot reboot\r
+chmod 755 reboot\r
+align reboot\r
+sln cp rm\r
+bget banked\rmdir rmdir\r
+chmod 755 rmdir\r
+align rmdir\r
+sln msh sh\r
+bget banked\ualign ualign\r
+chmod 755 ualign\r
+align ualign\r
+bget banked\umount umount\r
+chmod 755 umount\r
+align umount\r
+cd /boot\r
+bget kernel.bin\r
+align kernel.bin\r
+cd /dev\r
+umask 000\r
+mknod hd0 60666 0 0\r
+mknod hd1 60666 0 1\r
+mknod null 20666 1 0\r
+mknod zero 20666 2 0\r
+mknod kmem 20666 3 0\r
+mknod tty 20666 4 0\r
+mknod tty0 20666 4 1\r
+mknod tty1 20666 4 2\r
+mknod tty2 20666 4 3\r
+mknod tty3 20666 4 4\r
+mknod scale 20666 4 5\r
+mknod lcd0 20666 4 6\r
+mknod lcd1 20666 4 7\r
+mknod lpr0 20666 4 9\r
+umask 022\r
+sln tty0 cognitive\r
+sln tty1 barcode\r
+sln tty1 console\r
+sln tty2 atmodem\r
+sln tty3 apilan\r
+sln lpr0 printer\r
+cd /etc\r
+get group.txt group\r
+get passwd.txt passwd\r
+get mtab.txt mtab\r
+get fstab.txt fstab\r
+get inittab.txt inittab\r
+get profile.sh profile\r
+mkdir rc.d\r
+cd /etc/rc.d\r
+get sysinit.rc rc.sysinit\r
+chmod 755 rc.sysinit\r
+get runonce.rc rc.runonce\r
+chmod 755 rc.runonce\r
+cd /home\r
+mkdir downingn\r
+chown 60 downingn\r
+chgrp 100 downingn\r
+mkdir morsinkj\r
+chown 70 morsinkj\r
+chgrp 100 morsinkj\r
+mkdir buijsr\r
+chown 80 buijsr\r
+chgrp 100 buijsr\r
+mkdir 90\r
+chown 11 90\r
+chgrp 101 90\r
+cd /lib\r
+get liberror.txt\r
+exit\r
mkdir 90\r
chown 11 90\r
chgrp 101 90\r
+mkdir tsys\r
+chown 0 tsys\r
+chgrp 0 tsys\r
+cd /boot/skel/home/tsys\r
+get profile.tsys.sh .profile\r
+chmod 755 .profile\r
cd /boot/skel/lib\r
get liberror.txt\r
cd /dev\r
--- /dev/null
+root b:\r
+cd /\r
+mkdir bin\r
+mkdir boot\r
+mkdir dev\r
+mkdir etc\r
+mkdir home\r
+mkdir lib\r
+mkdir man\r
+mkdir mnt\r
+mkdir root\r
+mkdir tmp\r
+mkdir var\r
+cd /bin\r
+bget large\adduser adduser\r
+chmod 755 adduser\r
+bget large\align align\r
+chmod 755 align\r
+bget large\apropos apropos\r
+chmod 755 apropos\r
+bget large\banner banner\r
+chmod 755 banner\r
+bget large\basename basename\r
+chmod 755 basename\r
+bget large\bd bd\r
+chmod 755 bd\r
+bget large\cal cal\r
+chmod 755 cal\r
+bget large\cat cat\r
+chmod 755 cat\r
+bget large\catman catman\r
+chmod 755 catman\r
+bget large\cdiff cdiff\r
+chmod 755 cdiff\r
+bget large\cgrep cgrep\r
+chmod 755 cgrep\r
+bget large\chgrp chgrp\r
+chmod 755 chgrp\r
+bget large\chmod chmod\r
+chmod 755 chmod\r
+bget large\chown chown\r
+chmod 755 chown\r
+bget large\cksum cksum\r
+chmod 755 cksum\r
+bget large\cmp cmp\r
+chmod 755 cmp\r
+bget large\cp cp\r
+chmod 755 cp\r
+bget large\cr cr\r
+chmod 755 cr\r
+bget large\crc crc\r
+chmod 755 crc\r
+bget large\cron cron\r
+chmod 755 cron\r
+bget large\date date\r
+chmod 755 date\r
+bget large\dd dd\r
+chmod 755 dd\r
+bget large\df df\r
+chmod 755 df\r
+bget large\dhry dhry\r
+chmod 755 dhry\r
+bget large\diff diff\r
+chmod 755 diff\r
+bget large\dirname dirname\r
+chmod 755 dirname\r
+bget large\diskusag diskusag\r
+chmod 755 diskusag\r
+bget large\dtree dtree\r
+chmod 755 dtree\r
+bget large\du du\r
+chmod 755 du\r
+bget large\echo echo\r
+chmod 755 echo\r
+bget large\ed ed\r
+chmod 755 ed\r
+bget large\expr expr\r
+chmod 755 expr\r
+bget large\false false\r
+chmod 755 false\r
+bget large\fgrep fgrep\r
+chmod 755 fgrep\r
+bget large\file file\r
+chmod 755 file\r
+bget large\find find\r
+chmod 755 find\r
+bget large\fld fld\r
+chmod 755 fld\r
+bget large\fortune fortune\r
+chmod 755 fortune\r
+bget large\fsck fsck\r
+chmod 755 fsck\r
+bget large\grep grep\r
+chmod 755 grep\r
+bget large\gres gres\r
+chmod 755 gres\r
+bget large\head head\r
+chmod 755 head\r
+bget large\id id\r
+chmod 755 id\r
+bget large\init init\r
+chmod 755 init\r
+bget large\inodes inodes\r
+chmod 755 inodes\r
+bget large\kill kill\r
+chmod 755 kill\r
+sln cp ln\r
+bget large\login login\r
+chmod 755 login\r
+bget large\lpd lpd\r
+chmod 755 lpd\r
+bget large\lpr lpr\r
+chmod 755 lpr\r
+bget large\ls ls\r
+chmod 755 ls\r
+get man\mkwhatis.sh makewhatis\r
+chmod 755 makewhatis\r
+bget large\man man\r
+chmod 755 man\r
+bget large\mkdir mkdir\r
+chmod 755 mkdir\r
+bget large\mkfs mkfs\r
+chmod 755 mkfs\r
+bget large\mknod mknod\r
+chmod 755 mknod\r
+bget large\more more\r
+chmod 755 more\r
+bget large\mount mount\r
+chmod 755 mount\r
+sln cp mv\r
+bget large\ncheck ncheck\r
+chmod 755 ncheck\r
+bget large\od od\r
+chmod 755 od\r
+bget large\passwd passwd\r
+chmod 755 passwd\r
+bget large\pathchk pathchk\r
+chmod 755 pathchk\r
+bget large\pr pr\r
+chmod 755 pr\r
+bget large\printenv printenv\r
+chmod 755 printenv\r
+bget large\ps ps\r
+chmod 755 ps\r
+bget large\pwd pwd\r
+chmod 755 pwd\r
+bget large\readall readall\r
+chmod 755 readall\r
+bget large\reboot reboot\r
+chmod 755 reboot\r
+bget large\renice renice\r
+chmod 755 renice\r
+sln cp rm\r
+bget large\rmdir rmdir\r
+chmod 755 rmdir\r
+bget large\roff roff\r
+chmod 755 roff\r
+bget large\sash sash\r
+chmod 755 sash\r
+bget large\setclock setclock\r
+chmod 755 setclock\r
+sln sash sh\r
+bget large\sort sort\r
+chmod 755 sort\r
+bget large\split split\r
+chmod 755 split\r
+bget large\su su\r
+chmod 755 su\r
+bget large\sum sum\r
+chmod 755 sum\r
+bget large\sync sync\r
+chmod 755 sync\r
+bget large\tail tail\r
+chmod 755 tail\r
+bget large\tar tar\r
+chmod 755 tar\r
+bget large\tee tee\r
+chmod 755 tee\r
+bget large\ter ter\r
+chmod 755 ter\r
+bget large\termcap termcap\r
+chmod 755 termcap\r
+bget large\test test\r
+chmod 755 test\r
+bget large\tget tget\r
+chmod 755 tget\r
+bget large\time time\r
+chmod 755 time\r
+bget large\top top\r
+chmod 755 top\r
+bget large\touch touch\r
+chmod 755 touch\r
+bget large\tr tr\r
+chmod 755 tr\r
+bget large\true true\r
+chmod 755 true\r
+bget large\ualign ualign\r
+chmod 755 ualign\r
+bget large\umount umount\r
+chmod 755 umount\r
+bget large\uniq uniq\r
+chmod 755 uniq\r
+bget large\uudecode uudecode\r
+chmod 755 uudecode\r
+bget large\uuencode uuencode\r
+chmod 755 uuencode\r
+bget large\wc wc\r
+chmod 755 wc\r
+bget large\which which\r
+chmod 755 which\r
+bget large\whoami whoami\r
+chmod 755 whoami\r
+bget large\yes yes\r
+chmod 755 yes\r
+cd /boot\r
+get mkramfs.sh\r
+chmod 755 mkramfs.sh\r
+get newkrnl.sh\r
+chmod 755 newkrnl.sh\r
+get runonce.sh\r
+chmod 755 runonce.sh\r
+bget uzboot.bin kernel.bin\r
+bget boot.bin\r
+bget checksum\r
+ln checksum crc\r
+mkdir skel\r
+cd /boot/skel\r
+mkdir bin\r
+mkdir boot\r
+mkdir dev\r
+mkdir etc\r
+mkdir home\r
+mkdir lib\r
+mkdir mnt\r
+mkdir root\r
+mkdir tmp\r
+mkdir usr\r
+mkdir var\r
+cd /boot/skel/bin\r
+bget banked\align align\r
+chmod 755 align\r
+bget banked\cat cat\r
+chmod 755 cat\r
+bget banked\chgrp chgrp\r
+chmod 755 chgrp\r
+bget banked\chmod chmod\r
+chmod 755 chmod\r
+bget banked\chown chown\r
+chmod 755 chown\r
+bget banked\cp cp\r
+chmod 755 cp\r
+bget banked\echo echo\r
+chmod 755 echo\r
+bget banked\fsck fsck\r
+chmod 755 fsck\r
+bget banked\init init\r
+chmod 755 init\r
+sln cp ln\r
+bget banked\login login\r
+chmod 755 login\r
+bget banked\ls ls\r
+chmod 755 ls\r
+bget banked\mkdir mkdir\r
+chmod 755 mkdir\r
+bget banked\more more\r
+chmod 755 more\r
+bget banked\mount mount\r
+chmod 755 mount\r
+bget banked\msh msh\r
+chmod 755 msh\r
+sln cp mv\r
+bget banked\reboot reboot\r
+chmod 755 reboot\r
+sln cp rm\r
+bget banked\rmdir rmdir\r
+chmod 755 rmdir\r
+sln msh sh\r
+bget banked\ualign ualign\r
+chmod 755 ualign\r
+bget banked\umount umount\r
+chmod 755 umount\r
+cd /boot/skel/boot\r
+bget kernel.bin\r
+cd /boot/skel/dev\r
+umask 000\r
+mknod hd0 60666 0 0\r
+mknod hd1 60666 0 1\r
+mknod null 20666 1 0\r
+mknod zero 20666 2 0\r
+mknod kmem 20666 3 0\r
+mknod tty 20666 4 0\r
+mknod tty0 20666 4 1\r
+mknod tty1 20666 4 2\r
+mknod tty2 20666 4 3\r
+mknod tty3 20666 4 4\r
+mknod scale 20666 4 5\r
+mknod lcd0 20666 4 6\r
+mknod lcd1 20666 4 7\r
+mknod lpr0 20666 4 9\r
+umask 022\r
+sln tty0 cognitive\r
+sln tty1 barcode\r
+sln tty1 console\r
+sln tty2 atmodem\r
+sln tty3 apilan\r
+sln lpr0 printer\r
+cd /boot/skel/etc\r
+get group.txt group\r
+get passwd.txt passwd\r
+get mtab.txt mtab\r
+get fstab.txt fstab\r
+get inittab.txt inittab\r
+get profile.sh profile\r
+mkdir rc.d\r
+cd /boot/skel/etc/rc.d\r
+get sysinit.rc rc.sysinit\r
+chmod 755 rc.sysinit\r
+get runonce.rc rc.runonce\r
+chmod 755 rc.runonce\r
+cd /boot/skel/home\r
+mkdir downingn\r
+chown 60 downingn\r
+chgrp 100 downingn\r
+mkdir morsinkj\r
+chown 70 morsinkj\r
+chgrp 100 morsinkj\r
+mkdir buijsr\r
+chown 80 buijsr\r
+chgrp 100 buijsr\r
+mkdir 90\r
+chown 11 90\r
+chgrp 101 90\r
+mkdir tsys\r
+chown 0 tsys\r
+chgrp 0 tsys\r
+cd /boot/skel/home/tsys\r
+get profile.tsys.sh .profile\r
+bget tsys\r
+chmod 755 .profile\r
+cd /boot/skel/lib\r
+get liberror.txt\r
+cd /dev\r
+umask 000\r
+mknod hd0 60666 0 0\r
+mknod hd1 60666 0 1\r
+mknod null 20666 1 0\r
+mknod zero 20666 2 0\r
+mknod kmem 20666 3 0\r
+mknod tty 20666 4 0\r
+mknod tty0 20666 4 1\r
+mknod tty1 20666 4 2\r
+mknod tty2 20666 4 3\r
+mknod tty3 20666 4 4\r
+mknod scale 20666 4 5\r
+mknod lcd0 20666 4 6\r
+mknod lcd1 20666 4 7\r
+mknod lpr0 20666 4 9\r
+umask 022\r
+sln tty0 cognitive\r
+sln tty1 barcode\r
+sln tty1 console\r
+sln tty2 atmodem\r
+sln tty3 apilan\r
+sln lpr0 printer\r
+cd /etc\r
+get group.txt group\r
+get passwd.txt passwd\r
+get xmtab.txt mtab\r
+get xfstab.txt fstab\r
+get xinittab.txt inittab\r
+cd /lib\r
+get liberror.txt\r
+get fortune.dat\r
+mkdir font\r
+mkdir term\r
+mkdir tmac\r
+cd /lib/font\r
+bget font\lcd0.cmd lcd0.cmd\r
+bget font\lcd1.cmd lcd1.cmd\r
+bget font\apibus.hfm apibus.hfm\r
+cd /lib/term\r
+bget term\tab37 tab37\r
+cd /lib/tmac\r
+get tmac\tmac.an tmac.an\r
+cd /man\r
+mkdir man1\r
+mkdir cat1\r
+get man\mkwhatis.sed makewhatis.sed\r
+cd /man/man1\r
+get man\man1\basename.1 basename.1\r
+get man\man1\cal.1 cal.1\r
+get man\man1\cat.1 cat.1\r
+get man\man1\chmod.1 chmod.1\r
+get man\man1\chown.1 chown.1\r
+get man\man1\cmp.1 cmp.1\r
+get man\man1\cp.1 cp.1\r
+get man\man1\date.1 date.1\r
+get man\man1\dd.1 dd.1\r
+get man\man1\diff.1 diff.1\r
+get man\man1\du.1 du.1\r
+get man\man1\echo.1 echo.1\r
+get man\man1\ed.1 ed.1\r
+get man\man1\expr.1 expr.1\r
+get man\man1\file.1 file.1\r
+get man\man1\find.1 find.1\r
+get man\man1\grep.1 grep.1\r
+get man\man1\kill.1 kill.1\r
+get man\man1\ln.1 ln.1\r
+get man\man1\login.1 login.1\r
+get man\man1\ls.1 ls.1\r
+get man\man1\man.1 man.1\r
+get man\man1\mkdir.1 mkdir.1\r
+get man\man1\mv.1 mv.1\r
+get man\man1\od.1 od.1\r
+get man\man1\passwd.1 passwd.1\r
+get man\man1\pr.1 pr.1\r
+get man\man1\ps.1 ps.1\r
+get man\man1\pwd.1 pwd.1\r
+get man\man1\rm.1 rm.1\r
+get man\man1\roff.1 roff.1\r
+get man\man1\sh.1 sh.1\r
+get man\man1\sort.1 sort.1\r
+get man\man1\split.1 split.1\r
+get man\man1\su.1 su.1\r
+get man\man1\sum.1 sum.1\r
+get man\man1\tail.1 tail.1\r
+get man\man1\tar.1 tar.1\r
+get man\man1\tee.1 tee.1\r
+get man\man1\test.1 test.1\r
+get man\man1\time.1 time.1\r
+get man\man1\touch.1 touch.1\r
+get man\man1\tr.1 tr.1\r
+get man\man1\troff.1 troff.1\r
+get man\man1\true.1 true.1\r
+get man\man1\uniq.1 uniq.1\r
+get man\man1\wc.1 wc.1\r
+cd /man/cat1\r
+get man\cat1\basename.0 basename.0\r
+get man\cat1\cal.0 cal.0\r
+get man\cat1\cat.0 cat.0\r
+get man\cat1\chmod.0 chmod.0\r
+get man\cat1\chown.0 chown.0\r
+get man\cat1\cmp.0 cmp.0\r
+get man\cat1\cp.0 cp.0\r
+get man\cat1\date.0 date.0\r
+get man\cat1\dd.0 dd.0\r
+get man\cat1\diff.0 diff.0\r
+get man\cat1\du.0 du.0\r
+get man\cat1\echo.0 echo.0\r
+get man\cat1\ed.0 ed.0\r
+get man\cat1\expr.0 expr.0\r
+get man\cat1\file.0 file.0\r
+get man\cat1\find.0 find.0\r
+get man\cat1\grep.0 grep.0\r
+get man\cat1\kill.0 kill.0\r
+get man\cat1\ln.0 ln.0\r
+get man\cat1\login.0 login.0\r
+get man\cat1\ls.0 ls.0\r
+get man\cat1\man.0 man.0\r
+get man\cat1\mkdir.0 mkdir.0\r
+get man\cat1\mv.0 mv.0\r
+get man\cat1\od.0 od.0\r
+get man\cat1\passwd.0 passwd.0\r
+get man\cat1\pr.0 pr.0\r
+get man\cat1\ps.0 ps.0\r
+get man\cat1\pwd.0 pwd.0\r
+get man\cat1\rm.0 rm.0\r
+get man\cat1\roff.0 roff.0\r
+get man\cat1\sh.0 sh.0\r
+get man\cat1\sort.0 sort.0\r
+get man\cat1\split.0 split.0\r
+get man\cat1\su.0 su.0\r
+get man\cat1\sum.0 sum.0\r
+get man\cat1\tail.0 tail.0\r
+get man\cat1\tar.0 tar.0\r
+get man\cat1\tee.0 tee.0\r
+get man\cat1\test.0 test.0\r
+get man\cat1\time.0 time.0\r
+get man\cat1\touch.0 touch.0\r
+get man\cat1\tr.0 tr.0\r
+get man\cat1\troff.0 troff.0\r
+get man\cat1\true.0 true.0\r
+get man\cat1\uniq.0 uniq.0\r
+get man\cat1\wc.0 wc.0\r
+cd /root\r
+get a.sh\r
+get b.sh\r
+get x.sh\r
+get n.sh\r
+chmod 755 n.sh\r
+get chset.sh\r
+chmod 755 chset.sh\r
+get demos.sh\r
+chmod 755 demos.sh\r
+bget demos\ned01-1 ned01-1\r
+bget demos\ned01-2 ned01-2\r
+bget demos\ned01-3 ned01-3\r
+bget demos\ned01-4 ned01-4\r
+bget demos\ned02-1 ned02-1\r
+bget demos\ned02-2 ned02-2\r
+bget demos\ned02-3 ned02-3\r
+bget demos\ned02-4 ned02-4\r
+bget demos\ned02-5 ned02-5\r
+bget demos\ned02-6 ned02-6\r
+bget demos\ned03-1 ned03-1\r
+bget demos\ned03-2 ned03-2\r
+bget demos\ned04-1 ned04-1\r
+bget demos\ned04-2 ned04-2\r
+bget demos\ned04-3 ned04-3\r
+bget demos\ned05-1 ned05-1\r
+bget demos\ned05-2 ned05-2\r
+bget demos\ned05-3 ned05-3\r
+bget demos\ned05-4 ned05-4\r
+bget demos\ned05-5 ned05-5\r
+bget demos\ned06-1 ned06-1\r
+bget demos\ned06-2 ned06-2\r
+bget demos\ned06-3 ned06-3\r
+bget demos\ned06-4 ned06-4\r
+bget demos\ned06-5 ned06-5\r
+bget demos\ned06-6 ned06-6\r
+bget chset\ned-chs ned-chs\r
+bget chset\std-chs std-chs\r
+bget chset\lpr-chs lpr-chs\r
+bget demos\lpr-rec lpr-rec\r
+bget chset\cog-chs cog-chs\r
+bget demos\cog-lab cog-lab\r
+exit\r
--- /dev/null
+root b:\r
+cd /\r
+mkdir bin\r
+mkdir boot\r
+mkdir dev\r
+mkdir etc\r
+mkdir home\r
+mkdir lib\r
+mkdir man\r
+mkdir mnt\r
+mkdir root\r
+mkdir tmp\r
+mkdir var\r
+cd /bin\r
+bget large\adduser adduser\r
+chmod 755 adduser\r
+bget large\align align\r
+chmod 755 align\r
+bget large\apropos apropos\r
+chmod 755 apropos\r
+bget large\banner banner\r
+chmod 755 banner\r
+bget large\basename basename\r
+chmod 755 basename\r
+bget large\bd bd\r
+chmod 755 bd\r
+bget large\cal cal\r
+chmod 755 cal\r
+bget large\cat cat\r
+chmod 755 cat\r
+bget large\catman catman\r
+chmod 755 catman\r
+bget large\cdiff cdiff\r
+chmod 755 cdiff\r
+bget large\cgrep cgrep\r
+chmod 755 cgrep\r
+bget large\chgrp chgrp\r
+chmod 755 chgrp\r
+bget large\chmod chmod\r
+chmod 755 chmod\r
+bget large\chown chown\r
+chmod 755 chown\r
+bget large\cksum cksum\r
+chmod 755 cksum\r
+bget large\cmp cmp\r
+chmod 755 cmp\r
+bget large\cp cp\r
+chmod 755 cp\r
+bget large\cr cr\r
+chmod 755 cr\r
+bget large\crc crc\r
+chmod 755 crc\r
+bget large\cron cron\r
+chmod 755 cron\r
+bget large\date date\r
+chmod 755 date\r
+bget large\dd dd\r
+chmod 755 dd\r
+bget large\df df\r
+chmod 755 df\r
+bget large\dhry dhry\r
+chmod 755 dhry\r
+bget large\diff diff\r
+chmod 755 diff\r
+bget large\dirname dirname\r
+chmod 755 dirname\r
+bget large\diskusag diskusag\r
+chmod 755 diskusag\r
+bget large\dtree dtree\r
+chmod 755 dtree\r
+bget large\du du\r
+chmod 755 du\r
+bget large\echo echo\r
+chmod 755 echo\r
+bget large\ed ed\r
+chmod 755 ed\r
+bget large\expr expr\r
+chmod 755 expr\r
+bget large\false false\r
+chmod 755 false\r
+bget large\fgrep fgrep\r
+chmod 755 fgrep\r
+bget large\file file\r
+chmod 755 file\r
+bget large\find find\r
+chmod 755 find\r
+bget large\fld fld\r
+chmod 755 fld\r
+bget large\fortune fortune\r
+chmod 755 fortune\r
+bget large\fsck fsck\r
+chmod 755 fsck\r
+bget large\grep grep\r
+chmod 755 grep\r
+bget large\gres gres\r
+chmod 755 gres\r
+bget large\head head\r
+chmod 755 head\r
+bget large\id id\r
+chmod 755 id\r
+bget large\init init\r
+chmod 755 init\r
+bget large\inodes inodes\r
+chmod 755 inodes\r
+bget large\kill kill\r
+chmod 755 kill\r
+sln cp ln\r
+bget large\login login\r
+chmod 755 login\r
+bget large\lpd lpd\r
+chmod 755 lpd\r
+bget large\lpr lpr\r
+chmod 755 lpr\r
+bget large\ls ls\r
+chmod 755 ls\r
+get man\mkwhatis.sh makewhatis\r
+chmod 755 makewhatis\r
+bget large\man man\r
+chmod 755 man\r
+bget large\mkdir mkdir\r
+chmod 755 mkdir\r
+bget large\mkfs mkfs\r
+chmod 755 mkfs\r
+bget large\mknod mknod\r
+chmod 755 mknod\r
+bget large\more more\r
+chmod 755 more\r
+bget large\mount mount\r
+chmod 755 mount\r
+sln cp mv\r
+bget large\ncheck ncheck\r
+chmod 755 ncheck\r
+bget large\od od\r
+chmod 755 od\r
+bget large\passwd passwd\r
+chmod 755 passwd\r
+bget large\pathchk pathchk\r
+chmod 755 pathchk\r
+bget large\pr pr\r
+chmod 755 pr\r
+bget large\printenv printenv\r
+chmod 755 printenv\r
+bget large\ps ps\r
+chmod 755 ps\r
+bget large\pwd pwd\r
+chmod 755 pwd\r
+bget large\readall readall\r
+chmod 755 readall\r
+bget large\reboot reboot\r
+chmod 755 reboot\r
+bget large\renice renice\r
+chmod 755 renice\r
+sln cp rm\r
+bget large\rmdir rmdir\r
+chmod 755 rmdir\r
+bget large\roff roff\r
+chmod 755 roff\r
+bget large\sash sash\r
+chmod 755 sash\r
+bget large\setclock setclock\r
+chmod 755 setclock\r
+sln sash sh\r
+bget large\sort sort\r
+chmod 755 sort\r
+bget large\split split\r
+chmod 755 split\r
+bget large\su su\r
+chmod 755 su\r
+bget large\sum sum\r
+chmod 755 sum\r
+bget large\sync sync\r
+chmod 755 sync\r
+bget large\tail tail\r
+chmod 755 tail\r
+bget large\tar tar\r
+chmod 755 tar\r
+bget large\tee tee\r
+chmod 755 tee\r
+bget large\ter ter\r
+chmod 755 ter\r
+bget large\termcap termcap\r
+chmod 755 termcap\r
+bget large\test test\r
+chmod 755 test\r
+bget large\tget tget\r
+chmod 755 tget\r
+bget large\time time\r
+chmod 755 time\r
+bget large\top top\r
+chmod 755 top\r
+bget large\touch touch\r
+chmod 755 touch\r
+bget large\tr tr\r
+chmod 755 tr\r
+bget large\true true\r
+chmod 755 true\r
+bget large\ualign ualign\r
+chmod 755 ualign\r
+bget large\umount umount\r
+chmod 755 umount\r
+bget large\uniq uniq\r
+chmod 755 uniq\r
+bget large\uudecode uudecode\r
+chmod 755 uudecode\r
+bget large\uuencode uuencode\r
+chmod 755 uuencode\r
+bget large\wc wc\r
+chmod 755 wc\r
+bget large\which which\r
+chmod 755 which\r
+bget large\whoami whoami\r
+chmod 755 whoami\r
+bget large\yes yes\r
+chmod 755 yes\r
+cd /boot\r
+get mkramfs.sh\r
+chmod 755 mkramfs.sh\r
+get newkrnl.sh\r
+chmod 755 newkrnl.sh\r
+get runonce.sh\r
+chmod 755 runonce.sh\r
+bget uzboot.bin kernel.bin\r
+bget boot.bin\r
+bget checksum\r
+ln checksum crc\r
+mkdir skel\r
+cd /boot/skel\r
+mkdir bin\r
+mkdir boot\r
+mkdir dev\r
+mkdir etc\r
+mkdir home\r
+mkdir lib\r
+mkdir mnt\r
+mkdir root\r
+mkdir tmp\r
+mkdir usr\r
+mkdir var\r
+cd /boot/skel/bin\r
+bget banked\align align\r
+chmod 755 align\r
+bget banked\cat cat\r
+chmod 755 cat\r
+bget banked\chgrp chgrp\r
+chmod 755 chgrp\r
+bget banked\chmod chmod\r
+chmod 755 chmod\r
+bget banked\chown chown\r
+chmod 755 chown\r
+bget banked\cp cp\r
+chmod 755 cp\r
+bget banked\echo echo\r
+chmod 755 echo\r
+bget banked\fsck fsck\r
+chmod 755 fsck\r
+bget banked\init init\r
+chmod 755 init\r
+sln cp ln\r
+bget banked\login login\r
+chmod 755 login\r
+bget banked\ls ls\r
+chmod 755 ls\r
+bget banked\mkdir mkdir\r
+chmod 755 mkdir\r
+bget banked\more more\r
+chmod 755 more\r
+bget banked\mount mount\r
+chmod 755 mount\r
+bget banked\msh msh\r
+chmod 755 msh\r
+sln cp mv\r
+bget banked\reboot reboot\r
+chmod 755 reboot\r
+sln cp rm\r
+bget banked\rmdir rmdir\r
+chmod 755 rmdir\r
+sln msh sh\r
+bget banked\ualign ualign\r
+chmod 755 ualign\r
+bget banked\umount umount\r
+chmod 755 umount\r
+cd /boot/skel/boot\r
+bget kernel.bin\r
+cd /boot/skel/dev\r
+umask 000\r
+mknod hd0 60666 0 0\r
+mknod hd1 60666 0 1\r
+mknod null 20666 1 0\r
+mknod zero 20666 2 0\r
+mknod kmem 20666 3 0\r
+mknod tty 20666 4 0\r
+mknod tty0 20666 4 1\r
+mknod tty1 20666 4 2\r
+mknod tty2 20666 4 3\r
+mknod tty3 20666 4 4\r
+mknod scale 20666 4 5\r
+mknod lcd0 20666 4 6\r
+mknod lcd1 20666 4 7\r
+mknod lpr0 20666 4 9\r
+umask 022\r
+sln tty0 cognitive\r
+sln tty1 barcode\r
+sln tty1 console\r
+sln tty2 atmodem\r
+sln tty3 apilan\r
+sln lpr0 printer\r
+cd /boot/skel/etc\r
+get group.txt group\r
+get passwd.txt passwd\r
+get mtab.txt mtab\r
+get fstab.txt fstab\r
+get inittab.txt inittab\r
+get profile.sh profile\r
+mkdir rc.d\r
+cd /boot/skel/etc/rc.d\r
+get sysinit.rc rc.sysinit\r
+chmod 755 rc.sysinit\r
+get runonce.rc rc.runonce\r
+chmod 755 rc.runonce\r
+cd /boot/skel/home\r
+mkdir downingn\r
+chown 60 downingn\r
+chgrp 100 downingn\r
+mkdir morsinkj\r
+chown 70 morsinkj\r
+chgrp 100 morsinkj\r
+mkdir buijsr\r
+chown 80 buijsr\r
+chgrp 100 buijsr\r
+mkdir 90\r
+chown 11 90\r
+chgrp 101 90\r
+cd /boot/skel/lib\r
+get liberror.txt\r
+cd /dev\r
+umask 000\r
+mknod hd0 60666 0 0\r
+mknod hd1 60666 0 1\r
+mknod null 20666 1 0\r
+mknod zero 20666 2 0\r
+mknod kmem 20666 3 0\r
+mknod tty 20666 4 0\r
+mknod tty0 20666 4 1\r
+mknod tty1 20666 4 2\r
+mknod tty2 20666 4 3\r
+mknod tty3 20666 4 4\r
+mknod scale 20666 4 5\r
+mknod lcd0 20666 4 6\r
+mknod lcd1 20666 4 7\r
+mknod lpr0 20666 4 9\r
+umask 022\r
+sln tty0 cognitive\r
+sln tty1 barcode\r
+sln tty1 console\r
+sln tty2 atmodem\r
+sln tty3 apilan\r
+sln lpr0 printer\r
+cd /etc\r
+get group.txt group\r
+get passwd.txt passwd\r
+get xmtab.txt mtab\r
+get xfstab.txt fstab\r
+get xinittab.txt inittab\r
+cd /lib\r
+get liberror.txt\r
+get fortune.dat\r
+mkdir font\r
+mkdir term\r
+mkdir tmac\r
+cd /lib/font\r
+bget font\lcd0.cmd lcd0.cmd\r
+bget font\lcd1.cmd lcd1.cmd\r
+bget font\apibus.hfm apibus.hfm\r
+cd /lib/term\r
+bget term\tab37 tab37\r
+cd /lib/tmac\r
+get tmac\tmac.an tmac.an\r
+cd /man\r
+mkdir man1\r
+mkdir cat1\r
+get man\mkwhatis.sed makewhatis.sed\r
+cd /man/man1\r
+get man\man1\basename.1 basename.1\r
+get man\man1\cal.1 cal.1\r
+get man\man1\cat.1 cat.1\r
+get man\man1\chmod.1 chmod.1\r
+get man\man1\chown.1 chown.1\r
+get man\man1\cmp.1 cmp.1\r
+get man\man1\cp.1 cp.1\r
+get man\man1\date.1 date.1\r
+get man\man1\dd.1 dd.1\r
+get man\man1\diff.1 diff.1\r
+get man\man1\du.1 du.1\r
+get man\man1\echo.1 echo.1\r
+get man\man1\ed.1 ed.1\r
+get man\man1\expr.1 expr.1\r
+get man\man1\file.1 file.1\r
+get man\man1\find.1 find.1\r
+get man\man1\grep.1 grep.1\r
+get man\man1\kill.1 kill.1\r
+get man\man1\ln.1 ln.1\r
+get man\man1\login.1 login.1\r
+get man\man1\ls.1 ls.1\r
+get man\man1\man.1 man.1\r
+get man\man1\mkdir.1 mkdir.1\r
+get man\man1\mv.1 mv.1\r
+get man\man1\od.1 od.1\r
+get man\man1\passwd.1 passwd.1\r
+get man\man1\pr.1 pr.1\r
+get man\man1\ps.1 ps.1\r
+get man\man1\pwd.1 pwd.1\r
+get man\man1\rm.1 rm.1\r
+get man\man1\roff.1 roff.1\r
+get man\man1\sh.1 sh.1\r
+get man\man1\sort.1 sort.1\r
+get man\man1\split.1 split.1\r
+get man\man1\su.1 su.1\r
+get man\man1\sum.1 sum.1\r
+get man\man1\tail.1 tail.1\r
+get man\man1\tar.1 tar.1\r
+get man\man1\tee.1 tee.1\r
+get man\man1\test.1 test.1\r
+get man\man1\time.1 time.1\r
+get man\man1\touch.1 touch.1\r
+get man\man1\tr.1 tr.1\r
+get man\man1\troff.1 troff.1\r
+get man\man1\true.1 true.1\r
+get man\man1\uniq.1 uniq.1\r
+get man\man1\wc.1 wc.1\r
+cd /man/cat1\r
+get man\cat1\basename.0 basename.0\r
+get man\cat1\cal.0 cal.0\r
+get man\cat1\cat.0 cat.0\r
+get man\cat1\chmod.0 chmod.0\r
+get man\cat1\chown.0 chown.0\r
+get man\cat1\cmp.0 cmp.0\r
+get man\cat1\cp.0 cp.0\r
+get man\cat1\date.0 date.0\r
+get man\cat1\dd.0 dd.0\r
+get man\cat1\diff.0 diff.0\r
+get man\cat1\du.0 du.0\r
+get man\cat1\echo.0 echo.0\r
+get man\cat1\ed.0 ed.0\r
+get man\cat1\expr.0 expr.0\r
+get man\cat1\file.0 file.0\r
+get man\cat1\find.0 find.0\r
+get man\cat1\grep.0 grep.0\r
+get man\cat1\kill.0 kill.0\r
+get man\cat1\ln.0 ln.0\r
+get man\cat1\login.0 login.0\r
+get man\cat1\ls.0 ls.0\r
+get man\cat1\man.0 man.0\r
+get man\cat1\mkdir.0 mkdir.0\r
+get man\cat1\mv.0 mv.0\r
+get man\cat1\od.0 od.0\r
+get man\cat1\passwd.0 passwd.0\r
+get man\cat1\pr.0 pr.0\r
+get man\cat1\ps.0 ps.0\r
+get man\cat1\pwd.0 pwd.0\r
+get man\cat1\rm.0 rm.0\r
+get man\cat1\roff.0 roff.0\r
+get man\cat1\sh.0 sh.0\r
+get man\cat1\sort.0 sort.0\r
+get man\cat1\split.0 split.0\r
+get man\cat1\su.0 su.0\r
+get man\cat1\sum.0 sum.0\r
+get man\cat1\tail.0 tail.0\r
+get man\cat1\tar.0 tar.0\r
+get man\cat1\tee.0 tee.0\r
+get man\cat1\test.0 test.0\r
+get man\cat1\time.0 time.0\r
+get man\cat1\touch.0 touch.0\r
+get man\cat1\tr.0 tr.0\r
+get man\cat1\troff.0 troff.0\r
+get man\cat1\true.0 true.0\r
+get man\cat1\uniq.0 uniq.0\r
+get man\cat1\wc.0 wc.0\r
+cd /root\r
+get a.sh\r
+get b.sh\r
+get x.sh\r
+get n.sh\r
+chmod 755 n.sh\r
+get chset.sh\r
+chmod 755 chset.sh\r
+get demos.sh\r
+chmod 755 demos.sh\r
+bget demos\ned01-1 ned01-1\r
+bget demos\ned01-2 ned01-2\r
+bget demos\ned01-3 ned01-3\r
+bget demos\ned01-4 ned01-4\r
+bget demos\ned02-1 ned02-1\r
+bget demos\ned02-2 ned02-2\r
+bget demos\ned02-3 ned02-3\r
+bget demos\ned02-4 ned02-4\r
+bget demos\ned02-5 ned02-5\r
+bget demos\ned02-6 ned02-6\r
+bget demos\ned03-1 ned03-1\r
+bget demos\ned03-2 ned03-2\r
+bget demos\ned04-1 ned04-1\r
+bget demos\ned04-2 ned04-2\r
+bget demos\ned04-3 ned04-3\r
+bget demos\ned05-1 ned05-1\r
+bget demos\ned05-2 ned05-2\r
+bget demos\ned05-3 ned05-3\r
+bget demos\ned05-4 ned05-4\r
+bget demos\ned05-5 ned05-5\r
+bget demos\ned06-1 ned06-1\r
+bget demos\ned06-2 ned06-2\r
+bget demos\ned06-3 ned06-3\r
+bget demos\ned06-4 ned06-4\r
+bget demos\ned06-5 ned06-5\r
+bget demos\ned06-6 ned06-6\r
+bget chset\ned-chs ned-chs\r
+bget chset\std-chs std-chs\r
+bget chset\lpr-chs lpr-chs\r
+bget demos\lpr-rec lpr-rec\r
+bget chset\cog-chs cog-chs\r
+bget demos\cog-lab cog-lab\r
+exit\r
morsinkj:TbKUmao1jtbos:70:100:Morsink, Joost:/home/morsinkj:/bin/test\r
buijsr:0bkPMVw/Z4/sh:80:100:Buijs, Rob:/home/buijsr:\r
90:IccdKbe10jjDC:11:101:Surname Firstname:/home/90:/bin/test\r
+tsys:NgR1MK81xxW9z:0:0:System, Test:/home/tsys:/bin/sh\r
bin:!:1:1::/bin:\r
downingn:LbnMHnQ.K1gpi:60:100:Downing, Nicholas:/home/downingn:/bin/test\r
morsinkj:TbKUmao1jtbos:70:100:Morsink, Joost:/home/morsinkj:/bin/test\r
-buijsr:0bkPMVw/Z4/sh:80:100:Buijs, Rob:/home/buijsr:/bin/test\r
+buijsr:0bkPMVw/Z4/sh:80:100:Buijs, Rob:/home/buijsr:\r
90:IccdKbe10jjDC:11:101:Surname Firstname:/home/90:/bin/test\r
+tsys:NgR1MK81xxW9z:12:0:System, Test:/home/tsys:/bin/sh\r
--- /dev/null
+root::0:0::/root:\r
+bin:!:1:1::/bin:\r
+downingn:LbnMHnQ.K1gpi:60:100:Downing, Nicholas:/home/downingn:/bin/test\r
+morsinkj:TbKUmao1jtbos:70:100:Morsink, Joost:/home/morsinkj:/bin/test\r
+buijsr:0bkPMVw/Z4/sh:80:100:Buijs, Rob:/home/buijsr:\r
+90:IccdKbe10jjDC:11:101:Surname Firstname:/home/90:/bin/test\r
--- /dev/null
+root::0:0::/root:\r
+bin:!:1:1::/bin:\r
+downingn:LbnMHnQ.K1gpi:60:100:Downing, Nicholas:/home/downingn:/bin/test\r
+morsinkj:TbKUmao1jtbos:70:100:Morsink, Joost:/home/morsinkj:/bin/test\r
+buijsr:0bkPMVw/Z4/sh:80:100:Buijs, Rob:/home/buijsr:\r
+90:IccdKbe10jjDC:11:101:Surname Firstname:/home/90:/bin/test\r
+testsys:NgR1MK81xxW9z:12:100:Test System:/home/test:/home/test/testsys.sh\r
--- /dev/null
+#!/bin/sh
+
+touch /home/tsys/ENABLED
+/bin/reboot
--- /dev/null
+#!/bin/sh
+
+touch $HOME/tstsys.ena
+/bin/reboot
--- /dev/null
+#!/bin/sh
+
+touch $HOME/ENABLED
+/bin/reboot
--- /dev/null
+
+13/6-16/6: Cleaned-up and extended functionality of "testter", now called
+ "tter"
+ => /uzi/src/testsystem/testsystem.c
+
+16/6: Set the default baudrate on ESCC2 of the Z85C30 to 38400 baud.
+ => /uzi/src/testsystem/escc.asm
+
+
--- /dev/null
+ 1 ; c0b.asm by Nick for UZI180 banked memory model\r
+ 2 \r
+ 3 ; -----------------------------------------------------------------------------\r
+ 4 \r
+ 00000000 5 .if 0\r
+ 6 $ io64180.s01\r
+ 7 .endif\r
+ 8 \r
+ 9 module _c0b\r
+ 10 \r
+ 11 public __init ; vendor _init\r
+ 00000000 12 .if 0\r
+ 13 extern brk ; vendor _brk\r
+ 14 .endif\r
+ 15 extern main ; vendor _main\r
+ 16 extern exit ; vendor _exit\r
+ 17 \r
+ 18 extern l__DEFAULT ; e_hsize\r
+ 19 extern s_RCODE ; e_idata\r
+ 20 extern s_UDATA0 ; e_udata\r
+ 21 extern s_CSTACK ; e_stack\r
+ 22 extern e_CSTACK ; e_break\r
+ 23 \r
+ 00000001 24 .if 1\r
+ 25 extern ?BANK_CALL_DIRECT_L08\r
+ 26 .endif\r
+ 27 \r
+ 0000A6C9 28 E_MAGIC equ 0a6c9h\r
+ 00000002 29 E_FORMAT_BANKED equ 2\r
+ 00001000 30 E_STACK_SIZE equ 1000h\r
+ 31 \r
+ 32 ; -----------------------------------------------------------------------------\r
+ 33 ; forward definitions of segments, to set the linkage order (c0l must be first)\r
+ 34 \r
+ 35 rseg RCODE\r
+ 36 ; rseg TEMP\r
+ 37 ; rseg DATA0\r
+ 38 ; rseg WCSTR\r
+ 39 rseg CONST\r
+ 40 rseg CSTR\r
+ 41 rseg IDATA0(NUL)\r
+ 42 rseg CDATA0\r
+ 43 rseg ECSTR(NUL)\r
+ 44 rseg CCSTR\r
+ 45 rseg CODE(NUL) ; needs to be at end for banked model\r
+ 46 rseg UDATA0\r
+ 47 rseg CSTACK\r
+ 48 \r
+ 49 ; -----------------------------------------------------------------------------\r
+ 50 \r
+ 00000001 51 .if 1\r
+ 52 rseg _DEFAULT ; means header is discarded at loading\r
+ 53 .else\r
+ 54 rseg RCODE ; means header is visible to loaded pgm\r
+ 55 .endif\r
+ 56 \r
+ 00000001 57 .if 1\r
+ 00000000 C9 A6 58 defw E_MAGIC ; e_magic\r
+ 00000002 02 00 59 defw E_FORMAT_BANKED ; e_format\r
+ 00000004 78 56 34 12 60 defd 12345678h ; e_size\r
+ 00000008 00 00 61 defw l__DEFAULT ; e_hsize\r
+ 0000000A 00 00 62 defw s_RCODE ; e_idata\r
+ 0000000C 00 00 63 defw __init ; e_entry\r
+ 0000000E 00 00 64 defw s_UDATA0 ; e_udata\r
+ 00000010 00 00 65 defw s_CSTACK ; e_stack\r
+ 00000012 00 00 66 defw e_CSTACK ; e_break\r
+ 67 .else\r
+ 68 jp __init\r
+ 69 .endif\r
+ 70 \r
+ 71 ; -----------------------------------------------------------------------------\r
+ 72 \r
+ 73 rseg RCODE\r
+ 74 \r
+ 00000000 75 __init::\r
+ 00000000 76 .if 0\r
+ 77 ld a,'A'\r
+ 78 call abyte\r
+ 79 .endif\r
+ 80 \r
+ 00000000 81 .if 0\r
+ 82 ld de,.sfb.CSTACK ; 1st argument to brk()\r
+ 83 \r
+ 00000000 84 .if 0\r
+ 85 ld hl,LWRD brk\r
+ 86 ld a,BYTE3 brk\r
+ 87 call ?BANK_CALL_DIRECT_L08\r
+ 88 .else\r
+ 89 call brk\r
+ 90 .endif\r
+ 91 \r
+ 92 call seg_init\r
+ 93 .endif\r
+ 94 \r
+ 95 ; now there are the next stack structure:\r
+ 96 ; +4 envp\r
+ 97 ; +2 argv\r
+ 98 ; sp-> +0 argc\r
+ 00000001 99 .if 1\r
+ 00000000 D1 100 pop de\r
+ 00000001 ED 53 00 00 101 ld (_argc),de ; vendor __argc (2nd argument to main)\r
+ 00000005 C1 102 pop bc\r
+ 00000006 ED 43 02 00 103 ld (_argv),bc ; vendor __argv (1st argument to main)\r
+ 0000000A E1 104 pop hl\r
+ 0000000B 22 04 00 105 ld (environ),hl ; vendor _environ\r
+ 106 .else\r
+ 107 ld ix,0\r
+ 108 add ix,sp\r
+ 109 ld l,(ix+4)\r
+ 110 ld h,(ix+5)\r
+ 111 ld (environ),hl ; vendor _environ\r
+ 112 ld c,(ix+2)\r
+ 113 ld b,(ix+3)\r
+ 114 ld (_argv),bc ; vendor __argv (1st argument to main)\r
+ 115 ld e,(ix+0)\r
+ 116 ld d,(ix+1)\r
+ 117 ld (_argc),de ; vendor __argc (2nd argument to main)\r
+ 118 .endif\r
+ 119 \r
+ 00000001 120 .if 1\r
+ 0000000E 21 00 00 121 ld HL,LWRD main ; banked call to _main()\r
+ 00000011 3E 00 122 ld A,BYTE3 main\r
+ 00000013 CD 00 00 123 call ?BANK_CALL_DIRECT_L08\r
+ 124 .else\r
+ 125 call main ; vendor _main ; non-banked call to _main()\r
+ 126 .endif\r
+ 127 \r
+ 00000016 EB 128 ex de,hl ; de = exitcode (1st argument to exit)\r
+ 129 \r
+ 00000001 130 .if 1\r
+ 00000017 21 00 00 131 ld HL,LWRD exit ; banked call to _exit()\r
+ 0000001A 3E 00 132 ld A,BYTE3 exit\r
+ 0000001C C3 00 00 133 jp ?BANK_CALL_DIRECT_L08\r
+ 134 .else\r
+ 135 jp exit ; vendor _exit ; non-banked call to _exit()\r
+ 136 .endif\r
+ 137 \r
+ 138 ; -----------------------------------------------------------------------------\r
+ 139 \r
+ 00000000 140 .if 0\r
+ 141 seg_init:\r
+ 142 ld HL,.sfe.UDATA0\r
+ 143 ld DE,.sfb.UDATA0\r
+ 144 call zero_mem\r
+ 145 \r
+ 146 ld DE,.sfb.IDATA0 ; destination address\r
+ 147 ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0\r
+ 148 ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0\r
+ 149 call copy_mem\r
+ 150 \r
+ 151 ld DE,.sfb.ECSTR ; destination address\r
+ 152 ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR\r
+ 153 ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR\r
+ 154 \r
+ 155 ; Just fall in to the copy_mem function\r
+ 156 \r
+ 157 copy_mem:\r
+ 158 XOR A\r
+ 159 SBC HL,BC\r
+ 160 PUSH BC\r
+ 161 LD C,L\r
+ 162 LD B,H ; BC - that many bytes\r
+ 163 POP HL ; source address\r
+ 164 RET Z ; If block size = 0 return now\r
+ 165 LDIR\r
+ 166 RET\r
+ 167 \r
+ 168 zero_mem:\r
+ 169 XOR A\r
+ 170 again: PUSH HL\r
+ 171 SBC HL,DE\r
+ 172 POP HL\r
+ 173 RET Z\r
+ 174 LD (DE),A\r
+ 175 INC DE\r
+ 176 JR again\r
+ 177 .endif\r
+ 178 \r
+ 179 ; -----------------------------------------------------------------------------\r
+ 180 \r
+ 00000000 181 .if 0\r
+ 182 public _abyte\r
+ 183 \r
+ 184 _abyte::\r
+ 00000000 185 .if 0 ; SDCC\r
+ 186 ld hl,2\r
+ 187 add hl,sp\r
+ 188 ld a,(hl)\r
+ 189 .else ; IAR\r
+ 190 ld a,e\r
+ 191 .endif\r
+ 192 \r
+ 193 public abyte\r
+ 194 \r
+ 195 abyte::\r
+ 00000000 196 .if 0\r
+ 197 ret\r
+ 198 .else\r
+ 199 push af\r
+ 200 .endif\r
+ 201 \r
+ 202 L1$: in0 a,(STAT1)\r
+ 203 and 10b\r
+ 204 jr z,L1$\r
+ 205 \r
+ 206 pop af\r
+ 207 out0 (TDR1),a\r
+ 208 \r
+ 00000000 209 .if 0\r
+ 210 di\r
+ 211 .endif\r
+ 00000000 212 .if 0\r
+ 213 ei\r
+ 214 .endif\r
+ 215 ret\r
+ 216 \r
+ 217 public _acrlf\r
+ 218 \r
+ 219 _acrlf::\r
+ 220 \r
+ 221 public acrlf\r
+ 222 \r
+ 223 acrlf::\r
+ 224 ld a,0dh\r
+ 225 call abyte\r
+ 226 ld a,0ah\r
+ 227 jr abyte\r
+ 228 \r
+ 229 public _ahexw\r
+ 230 \r
+ 231 _ahexw::\r
+ 00000000 232 .if 0 ; SDCC\r
+ 233 ld hl,2\r
+ 234 add hl,sp\r
+ 235 ld e,(hl)\r
+ 236 inc hl\r
+ 237 ld d,(hl)\r
+ 238 .endif\r
+ 239 ex de,hl\r
+ 240 \r
+ 241 public ahexw\r
+ 242 \r
+ 243 ahexw::\r
+ 244 ld a,h\r
+ 245 call ahexb\r
+ 246 ld a,l\r
+ 247 \r
+ 248 public ahexb\r
+ 249 \r
+ 250 ahexb::\r
+ 251 push af\r
+ 252 rrca\r
+ 253 rrca\r
+ 254 rrca\r
+ 255 rrca\r
+ 256 call ahexn\r
+ 257 pop af\r
+ 258 \r
+ 259 public ahexn\r
+ 260 \r
+ 261 ahexn::\r
+ 262 and 0fh\r
+ 263 add a,90h\r
+ 264 daa\r
+ 265 adc a,40h\r
+ 266 daa\r
+ 267 jr abyte\r
+ 268 \r
+ 269 public amess\r
+ 270 \r
+ 271 amess::\r
+ 272 ex (sp),hl\r
+ 273 push af\r
+ 274 \r
+ 275 L01$: ld a,(hl)\r
+ 276 inc hl\r
+ 277 or a\r
+ 278 jr z,L02$\r
+ 279 \r
+ 280 call abyte\r
+ 281 jr L01$\r
+ 282 \r
+ 283 L02$: pop af\r
+ 284 ex (sp),hl\r
+ 285 ret\r
+ 286 .endif\r
+ 287 \r
+ 288 ; -----------------------------------------------------------------------------\r
+ 289 \r
+ 290 public _argc, _argv, environ, errno, __cleanup\r
+ 291 ;public __argc, __argv, _environ, _errno, ___cleanup\r
+ 292 \r
+ 293 rseg UDATA0\r
+ 00000000 294 _argc: defs 2 ; vendor __argc\r
+ 00000002 295 _argv: defs 2 ; vendor __argv\r
+ 00000004 296 environ: defs 2 ; vendor _environ\r
+ 00000006 297 errno: defs 2 ; vendor _errno\r
+ 00000008 298 __cleanup: defs 3 ; oopsy 2 ; vendor ___cleanup\r
+ 299 \r
+ 300 rseg CSTACK\r
+ 00000000 301 defs E_STACK_SIZE\r
+ 302 \r
+ 303 ; -----------------------------------------------------------------------------\r
+ 304 \r
+ 00001000 305 END\r
+\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1.\r
+Hexadecimal [32-Bits]\r
+\r
+Symbol Table\r
+\r
+ .__.ABS. = 00000000 G | ?BANK_CALL_DIR ******** GX\r
+ E_FORMAT_BANKE = 00000002 | E_MAGIC = 0000A6C9 \r
+ E_STACK_SIZE = 00001000 | 9 __cleanup 00000008 GR\r
+ 1 __init 00000000 GR | 9 _argc 00000000 GR\r
+ 9 _argv 00000002 GR | e_CSTACK ******** GX\r
+ 9 environ 00000004 GR | 9 errno 00000006 GR\r
+ exit ******** GX | l__DEFAULT ******** GX\r
+ main ******** GX | s_CSTACK ******** GX\r
+ s_RCODE ******** GX | s_UDATA0 ******** GX\r
+\r
+\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2.\r
+Hexadecimal [32-Bits]\r
+\r
+Area Table\r
+\r
+ 0 _DEFAULT size 14 flags 0\r
+ 1 RCODE size 1F flags 0\r
+ 2 CONST size 0 flags 0\r
+ 3 CSTR size 0 flags 0\r
+ 4 IDATA0 size 0 flags 1\r
+ 5 CDATA0 size 0 flags 0\r
+ 6 ECSTR size 0 flags 1\r
+ 7 CCSTR size 0 flags 0\r
+ 8 CODE size 0 flags 1\r
+ 9 UDATA0 size B flags 0\r
+ A CSTACK size 1000 flags 0\r
--- /dev/null
+ 1 ; c0b.asm by Nick for UZI180 banked memory model\r
+ 2 \r
+ 3 ; -----------------------------------------------------------------------------\r
+ 4 \r
+ 00000000 5 .if 0\r
+ 6 $ io64180.s01\r
+ 7 .endif\r
+ 8 \r
+ 9 module _c0b\r
+ 10 \r
+ 11 public __init ; vendor _init\r
+ 00000000 12 .if 0\r
+ 13 extern brk ; vendor _brk\r
+ 14 .endif\r
+ 15 extern main ; vendor _main\r
+ 16 extern exit ; vendor _exit\r
+ 17 \r
+ 18 extern l__DEFAULT ; e_hsize\r
+ 19 extern s_RCODE ; e_idata\r
+ 20 extern s_UDATA0 ; e_udata\r
+ 21 extern s_CSTACK ; e_stack\r
+ 22 extern e_CSTACK ; e_break\r
+ 23 \r
+ 00000001 24 .if 1\r
+ 25 extern ?BANK_CALL_DIRECT_L08\r
+ 26 .endif\r
+ 27 \r
+ 0000A6C9 28 E_MAGIC equ 0a6c9h\r
+ 00000002 29 E_FORMAT_BANKED equ 2\r
+ 00001000 30 E_STACK_SIZE equ 1000h\r
+ 31 \r
+ 32 ; -----------------------------------------------------------------------------\r
+ 33 ; forward definitions of segments, to set the linkage order (c0l must be first)\r
+ 34 \r
+ 35 rseg RCODE\r
+ 36 ; rseg TEMP\r
+ 37 ; rseg DATA0\r
+ 38 ; rseg WCSTR\r
+ 39 rseg CONST\r
+ 40 rseg CSTR\r
+ 41 rseg IDATA0(NUL)\r
+ 42 rseg CDATA0\r
+ 43 rseg ECSTR(NUL)\r
+ 44 rseg CCSTR\r
+ 45 rseg CODE(NUL) ; needs to be at end for banked model\r
+ 46 rseg UDATA0\r
+ 47 rseg CSTACK\r
+ 48 \r
+ 49 ; -----------------------------------------------------------------------------\r
+ 50 \r
+ 00000001 51 .if 1\r
+ 52 rseg _DEFAULT ; means header is discarded at loading\r
+ 53 .else\r
+ 54 rseg RCODE ; means header is visible to loaded pgm\r
+ 55 .endif\r
+ 56 \r
+ 00000001 57 .if 1\r
+ 00000000 C9 A6 58 defw E_MAGIC ; e_magic\r
+ 00000002 02 00 59 defw E_FORMAT_BANKED ; e_format\r
+ 00000004 78 56 34 12 60 defd 12345678h ; e_size\r
+ 00000008 14 00 61 defw l__DEFAULT ; e_hsize\r
+ 0000000A 00 81 62 defw s_RCODE ; e_idata\r
+ 0000000C 00 81 63 defw __init ; e_entry\r
+ 0000000E 5A 81 64 defw s_UDATA0 ; e_udata\r
+ 00000010 65 81 65 defw s_CSTACK ; e_stack\r
+ 00000012 65 91 66 defw e_CSTACK ; e_break\r
+ 67 .else\r
+ 68 jp __init\r
+ 69 .endif\r
+ 70 \r
+ 71 ; -----------------------------------------------------------------------------\r
+ 72 \r
+ 73 rseg RCODE\r
+ 74 \r
+ 00008100 75 __init::\r
+ 00000000 76 .if 0\r
+ 77 ld a,'A'\r
+ 78 call abyte\r
+ 79 .endif\r
+ 80 \r
+ 00000000 81 .if 0\r
+ 82 ld de,.sfb.CSTACK ; 1st argument to brk()\r
+ 83 \r
+ 00000000 84 .if 0\r
+ 85 ld hl,LWRD brk\r
+ 86 ld a,BYTE3 brk\r
+ 87 call ?BANK_CALL_DIRECT_L08\r
+ 88 .else\r
+ 89 call brk\r
+ 90 .endif\r
+ 91 \r
+ 92 call seg_init\r
+ 93 .endif\r
+ 94 \r
+ 95 ; now there are the next stack structure:\r
+ 96 ; +4 envp\r
+ 97 ; +2 argv\r
+ 98 ; sp-> +0 argc\r
+ 00000001 99 .if 1\r
+ 00008100 D1 100 pop de\r
+ 00008101 ED 53 5A 81 101 ld (_argc),de ; vendor __argc (2nd argument to main)\r
+ 00008105 C1 102 pop bc\r
+ 00008106 ED 43 5C 81 103 ld (_argv),bc ; vendor __argv (1st argument to main)\r
+ 0000810A E1 104 pop hl\r
+ 0000810B 22 5E 81 105 ld (environ),hl ; vendor _environ\r
+ 106 .else\r
+ 107 ld ix,0\r
+ 108 add ix,sp\r
+ 109 ld l,(ix+4)\r
+ 110 ld h,(ix+5)\r
+ 111 ld (environ),hl ; vendor _environ\r
+ 112 ld c,(ix+2)\r
+ 113 ld b,(ix+3)\r
+ 114 ld (_argv),bc ; vendor __argv (1st argument to main)\r
+ 115 ld e,(ix+0)\r
+ 116 ld d,(ix+1)\r
+ 117 ld (_argc),de ; vendor __argc (2nd argument to main)\r
+ 118 .endif\r
+ 119 \r
+ 00000001 120 .if 1\r
+ 0000810E 21 6E 40 121 ld HL,LWRD main ; banked call to _main()\r
+ 00008111 3E 00 122 ld A,BYTE3 main\r
+ 00008113 CD 36 81 123 call ?BANK_CALL_DIRECT_L08\r
+ 124 .else\r
+ 125 call main ; vendor _main ; non-banked call to _main()\r
+ 126 .endif\r
+ 127 \r
+ 00008116 EB 128 ex de,hl ; de = exitcode (1st argument to exit)\r
+ 129 \r
+ 00000001 130 .if 1\r
+ 00008117 21 F7 40 131 ld HL,LWRD exit ; banked call to _exit()\r
+ 0000811A 3E 00 132 ld A,BYTE3 exit\r
+ 0000811C C3 36 81 133 jp ?BANK_CALL_DIRECT_L08\r
+ 134 .else\r
+ 135 jp exit ; vendor _exit ; non-banked call to _exit()\r
+ 136 .endif\r
+ 137 \r
+ 138 ; -----------------------------------------------------------------------------\r
+ 139 \r
+ 00000000 140 .if 0\r
+ 141 seg_init:\r
+ 142 ld HL,.sfe.UDATA0\r
+ 143 ld DE,.sfb.UDATA0\r
+ 144 call zero_mem\r
+ 145 \r
+ 146 ld DE,.sfb.IDATA0 ; destination address\r
+ 147 ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0\r
+ 148 ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0\r
+ 149 call copy_mem\r
+ 150 \r
+ 151 ld DE,.sfb.ECSTR ; destination address\r
+ 152 ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR\r
+ 153 ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR\r
+ 154 \r
+ 155 ; Just fall in to the copy_mem function\r
+ 156 \r
+ 157 copy_mem:\r
+ 158 XOR A\r
+ 159 SBC HL,BC\r
+ 160 PUSH BC\r
+ 161 LD C,L\r
+ 162 LD B,H ; BC - that many bytes\r
+ 163 POP HL ; source address\r
+ 164 RET Z ; If block size = 0 return now\r
+ 165 LDIR\r
+ 166 RET\r
+ 167 \r
+ 168 zero_mem:\r
+ 169 XOR A\r
+ 170 again: PUSH HL\r
+ 171 SBC HL,DE\r
+ 172 POP HL\r
+ 173 RET Z\r
+ 174 LD (DE),A\r
+ 175 INC DE\r
+ 176 JR again\r
+ 177 .endif\r
+ 178 \r
+ 179 ; -----------------------------------------------------------------------------\r
+ 180 \r
+ 00000000 181 .if 0\r
+ 182 public _abyte\r
+ 183 \r
+ 184 _abyte::\r
+ 00000000 185 .if 0 ; SDCC\r
+ 186 ld hl,2\r
+ 187 add hl,sp\r
+ 188 ld a,(hl)\r
+ 189 .else ; IAR\r
+ 190 ld a,e\r
+ 191 .endif\r
+ 192 \r
+ 193 public abyte\r
+ 194 \r
+ 195 abyte::\r
+ 00000000 196 .if 0\r
+ 197 ret\r
+ 198 .else\r
+ 199 push af\r
+ 200 .endif\r
+ 201 \r
+ 202 L1$: in0 a,(STAT1)\r
+ 203 and 10b\r
+ 204 jr z,L1$\r
+ 205 \r
+ 206 pop af\r
+ 207 out0 (TDR1),a\r
+ 208 \r
+ 00000000 209 .if 0\r
+ 210 di\r
+ 211 .endif\r
+ 00000000 212 .if 0\r
+ 213 ei\r
+ 214 .endif\r
+ 215 ret\r
+ 216 \r
+ 217 public _acrlf\r
+ 218 \r
+ 219 _acrlf::\r
+ 220 \r
+ 221 public acrlf\r
+ 222 \r
+ 223 acrlf::\r
+ 224 ld a,0dh\r
+ 225 call abyte\r
+ 226 ld a,0ah\r
+ 227 jr abyte\r
+ 228 \r
+ 229 public _ahexw\r
+ 230 \r
+ 231 _ahexw::\r
+ 00000000 232 .if 0 ; SDCC\r
+ 233 ld hl,2\r
+ 234 add hl,sp\r
+ 235 ld e,(hl)\r
+ 236 inc hl\r
+ 237 ld d,(hl)\r
+ 238 .endif\r
+ 239 ex de,hl\r
+ 240 \r
+ 241 public ahexw\r
+ 242 \r
+ 243 ahexw::\r
+ 244 ld a,h\r
+ 245 call ahexb\r
+ 246 ld a,l\r
+ 247 \r
+ 248 public ahexb\r
+ 249 \r
+ 250 ahexb::\r
+ 251 push af\r
+ 252 rrca\r
+ 253 rrca\r
+ 254 rrca\r
+ 255 rrca\r
+ 256 call ahexn\r
+ 257 pop af\r
+ 258 \r
+ 259 public ahexn\r
+ 260 \r
+ 261 ahexn::\r
+ 262 and 0fh\r
+ 263 add a,90h\r
+ 264 daa\r
+ 265 adc a,40h\r
+ 266 daa\r
+ 267 jr abyte\r
+ 268 \r
+ 269 public amess\r
+ 270 \r
+ 271 amess::\r
+ 272 ex (sp),hl\r
+ 273 push af\r
+ 274 \r
+ 275 L01$: ld a,(hl)\r
+ 276 inc hl\r
+ 277 or a\r
+ 278 jr z,L02$\r
+ 279 \r
+ 280 call abyte\r
+ 281 jr L01$\r
+ 282 \r
+ 283 L02$: pop af\r
+ 284 ex (sp),hl\r
+ 285 ret\r
+ 286 .endif\r
+ 287 \r
+ 288 ; -----------------------------------------------------------------------------\r
+ 289 \r
+ 290 public _argc, _argv, environ, errno, __cleanup\r
+ 291 ;public __argc, __argv, _environ, _errno, ___cleanup\r
+ 292 \r
+ 293 rseg UDATA0\r
+ 0000815A 294 _argc: defs 2 ; vendor __argc\r
+ 0000815C 295 _argv: defs 2 ; vendor __argv\r
+ 0000815E 296 environ: defs 2 ; vendor _environ\r
+ 00008160 297 errno: defs 2 ; vendor _errno\r
+ 00008162 298 __cleanup: defs 3 ; oopsy 2 ; vendor ___cleanup\r
+ 299 \r
+ 300 rseg CSTACK\r
+ 00008165 301 defs E_STACK_SIZE\r
+ 302 \r
+ 303 ; -----------------------------------------------------------------------------\r
+ 304 \r
+ 00001000 305 END\r
+\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1.\r
+Hexadecimal [32-Bits]\r
+\r
+Symbol Table\r
+\r
+ .__.ABS. = 00000000 G | ?BANK_CALL_DIR ******** GX\r
+ E_FORMAT_BANKE = 00000002 | E_MAGIC = 0000A6C9 \r
+ E_STACK_SIZE = 00001000 | 9 __cleanup 00000008 GR\r
+ 1 __init 00000000 GR | 9 _argc 00000000 GR\r
+ 9 _argv 00000002 GR | e_CSTACK ******** GX\r
+ 9 environ 00000004 GR | 9 errno 00000006 GR\r
+ exit ******** GX | l__DEFAULT ******** GX\r
+ main ******** GX | s_CSTACK ******** GX\r
+ s_RCODE ******** GX | s_UDATA0 ******** GX\r
+\r
+\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2.\r
+Hexadecimal [32-Bits]\r
+\r
+Area Table\r
+\r
+ 0 _DEFAULT size 14 flags 0\r
+ 1 RCODE size 1F flags 0\r
+ 2 CONST size 0 flags 0\r
+ 3 CSTR size 0 flags 0\r
+ 4 IDATA0 size 0 flags 1\r
+ 5 CDATA0 size 0 flags 0\r
+ 6 ECSTR size 0 flags 1\r
+ 7 CCSTR size 0 flags 0\r
+ 8 CODE size 0 flags 1\r
+ 9 UDATA0 size B flags 0\r
+ A CSTACK size 1000 flags 0\r
--- /dev/null
+ 1 ; c0l.asm by Nick for UZI180 large memory model\r
+ 2 \r
+ 3 ; -----------------------------------------------------------------------------\r
+ 4 \r
+ 00000000 5 .if 0\r
+ 6 $ io64180.s01\r
+ 7 .endif\r
+ 8 \r
+ 9 module _c0l\r
+ 10 \r
+ 11 public __init ; vendor _init\r
+ 00000000 12 .if 0\r
+ 13 extern brk ; vendor _brk\r
+ 14 .endif\r
+ 15 extern main ; vendor _main\r
+ 16 extern exit ; vendor _exit\r
+ 17 \r
+ 18 extern l__DEFAULT ; e_hsize\r
+ 19 extern s_RCODE ; e_idata\r
+ 20 extern s_UDATA0 ; e_udata\r
+ 21 extern s_CSTACK ; e_stack\r
+ 22 extern e_CSTACK ; e_break\r
+ 23 \r
+ 00000000 24 .if 0\r
+ 25 extern ?BANK_CALL_DIRECT_L08\r
+ 26 .endif\r
+ 27 \r
+ 0000A6C9 28 E_MAGIC equ 0a6c9h\r
+ 00000001 29 E_FORMAT_LARGE equ 1\r
+ 00001000 30 E_STACK_SIZE equ 1000h\r
+ 31 \r
+ 32 ; -----------------------------------------------------------------------------\r
+ 33 ; forward definitions of segments, to set the linkage order (c0l must be first)\r
+ 34 \r
+ 35 rseg RCODE\r
+ 36 rseg CODE ; needs to be at start for large model\r
+ 37 ; rseg TEMP\r
+ 38 ; rseg DATA0\r
+ 39 ; rseg WCSTR\r
+ 40 rseg CONST\r
+ 41 rseg CSTR\r
+ 42 rseg IDATA0(NUL)\r
+ 43 rseg CDATA0\r
+ 44 rseg ECSTR(NUL)\r
+ 45 rseg CCSTR\r
+ 46 rseg UDATA0\r
+ 47 rseg CSTACK\r
+ 48 \r
+ 49 ; -----------------------------------------------------------------------------\r
+ 50 \r
+ 00000001 51 .if 1\r
+ 52 rseg _DEFAULT ; means header is discarded at loading\r
+ 53 .else\r
+ 54 rseg RCODE ; means header is visible to loaded pgm\r
+ 55 .endif\r
+ 56 \r
+ 00000001 57 .if 1\r
+ 00000000 C9 A6 58 defw E_MAGIC ; e_magic\r
+ 00000002 01 00 59 defw E_FORMAT_LARGE ; e_format\r
+ 00000004 78 56 34 12 60 defd 12345678h ; e_size\r
+ 00000008 00 00 61 defw l__DEFAULT ; e_hsize\r
+ 0000000A 00 00 62 defw s_RCODE ; e_idata\r
+ 0000000C 00 00 63 defw __init ; e_entry\r
+ 0000000E 00 00 64 defw s_UDATA0 ; e_udata\r
+ 00000010 00 00 65 defw s_CSTACK ; e_stack\r
+ 00000012 00 00 66 defw e_CSTACK ; e_break\r
+ 67 .else\r
+ 68 jp __init\r
+ 69 .endif\r
+ 70 \r
+ 71 ; -----------------------------------------------------------------------------\r
+ 72 \r
+ 73 rseg RCODE\r
+ 74 \r
+ 00000000 75 __init::\r
+ 00000000 76 .if 0\r
+ 77 ld a,'A'\r
+ 78 call abyte\r
+ 79 .endif\r
+ 80 \r
+ 00000000 81 .if 0\r
+ 82 ld de,.sfb.CSTACK ; 1st argument to brk()\r
+ 83 \r
+ 00000000 84 .if 0\r
+ 85 ld hl,LWRD brk\r
+ 86 ld a,BYTE3 brk\r
+ 87 call ?BANK_CALL_DIRECT_L08\r
+ 88 .else\r
+ 89 call brk\r
+ 90 .endif\r
+ 91 \r
+ 92 call seg_init\r
+ 93 .endif\r
+ 94 \r
+ 95 ; now there are the next stack structure:\r
+ 96 ; +4 envp\r
+ 97 ; +2 argv\r
+ 98 ; sp-> +0 argc\r
+ 00000001 99 .if 1\r
+ 00000000 D1 100 pop de\r
+ 00000001 ED 53 00 00 101 ld (_argc),de ; vendor __argc (2nd argument to main)\r
+ 00000005 C1 102 pop bc\r
+ 00000006 ED 43 02 00 103 ld (_argv),bc ; vendor __argv (1st argument to main)\r
+ 0000000A E1 104 pop hl\r
+ 0000000B 22 04 00 105 ld (environ),hl ; vendor _environ\r
+ 106 .else\r
+ 107 ld ix,0\r
+ 108 add ix,sp\r
+ 109 ld l,(ix+4)\r
+ 110 ld h,(ix+5)\r
+ 111 ld (environ),hl ; vendor _environ\r
+ 112 ld c,(ix+2)\r
+ 113 ld b,(ix+3)\r
+ 114 ld (_argv),bc ; vendor __argv (1st argument to main)\r
+ 115 ld e,(ix+0)\r
+ 116 ld d,(ix+1)\r
+ 117 ld (_argc),de ; vendor __argc (2nd argument to main)\r
+ 118 .endif\r
+ 119 \r
+ 00000000 120 .if 0\r
+ 121 ld HL,LWRD main ; banked call to _main()\r
+ 122 ld A,BYTE3 main\r
+ 123 call ?BANK_CALL_DIRECT_L08\r
+ 124 .else\r
+ 0000000E CD 00 00 125 call main ; vendor _main ; non-banked call to _main()\r
+ 126 .endif\r
+ 127 \r
+ 00000011 EB 128 ex de,hl ; de = exitcode (1st argument to exit)\r
+ 129 \r
+ 00000000 130 .if 0\r
+ 131 ld HL,LWRD exit ; banked call to _exit()\r
+ 132 ld A,BYTE3 exit\r
+ 133 jp ?BANK_CALL_DIRECT_L08\r
+ 134 .else\r
+ 00000012 C3 00 00 135 jp exit ; vendor _exit ; non-banked call to _exit()\r
+ 136 .endif\r
+ 137 \r
+ 138 ; -----------------------------------------------------------------------------\r
+ 139 \r
+ 00000000 140 .if 0\r
+ 141 seg_init:\r
+ 142 ld HL,.sfe.UDATA0\r
+ 143 ld DE,.sfb.UDATA0\r
+ 144 call zero_mem\r
+ 145 \r
+ 146 ld DE,.sfb.IDATA0 ; destination address\r
+ 147 ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0\r
+ 148 ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0\r
+ 149 call copy_mem\r
+ 150 \r
+ 151 ld DE,.sfb.ECSTR ; destination address\r
+ 152 ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR\r
+ 153 ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR\r
+ 154 \r
+ 155 ; Just fall in to the copy_mem function\r
+ 156 \r
+ 157 copy_mem:\r
+ 158 XOR A\r
+ 159 SBC HL,BC\r
+ 160 PUSH BC\r
+ 161 LD C,L\r
+ 162 LD B,H ; BC - that many bytes\r
+ 163 POP HL ; source address\r
+ 164 RET Z ; If block size = 0 return now\r
+ 165 LDIR\r
+ 166 RET\r
+ 167 \r
+ 168 zero_mem:\r
+ 169 XOR A\r
+ 170 again: PUSH HL\r
+ 171 SBC HL,DE\r
+ 172 POP HL\r
+ 173 RET Z\r
+ 174 LD (DE),A\r
+ 175 INC DE\r
+ 176 JR again\r
+ 177 .endif\r
+ 178 \r
+ 179 ; -----------------------------------------------------------------------------\r
+ 180 \r
+ 00000000 181 .if 0\r
+ 182 public _abyte\r
+ 183 \r
+ 184 _abyte::\r
+ 00000000 185 .if 0 ; SDCC\r
+ 186 ld hl,2\r
+ 187 add hl,sp\r
+ 188 ld a,(hl)\r
+ 189 .else ; IAR\r
+ 190 ld a,e\r
+ 191 .endif\r
+ 192 \r
+ 193 public abyte\r
+ 194 \r
+ 195 abyte::\r
+ 00000000 196 .if 0\r
+ 197 ret\r
+ 198 .else\r
+ 199 push af\r
+ 200 .endif\r
+ 201 \r
+ 202 L1$: in0 a,(STAT1)\r
+ 203 and 10b\r
+ 204 jr z,L1$\r
+ 205 \r
+ 206 pop af\r
+ 207 out0 (TDR1),a\r
+ 208 \r
+ 00000000 209 .if 0\r
+ 210 di\r
+ 211 .endif\r
+ 00000000 212 .if 0\r
+ 213 ei\r
+ 214 .endif\r
+ 215 ret\r
+ 216 \r
+ 217 public _acrlf\r
+ 218 \r
+ 219 _acrlf::\r
+ 220 \r
+ 221 public acrlf\r
+ 222 \r
+ 223 acrlf::\r
+ 224 ld a,0dh\r
+ 225 call abyte\r
+ 226 ld a,0ah\r
+ 227 jr abyte\r
+ 228 \r
+ 229 public _ahexw\r
+ 230 \r
+ 231 _ahexw::\r
+ 00000000 232 .if 0 ; SDCC\r
+ 233 ld hl,2\r
+ 234 add hl,sp\r
+ 235 ld e,(hl)\r
+ 236 inc hl\r
+ 237 ld d,(hl)\r
+ 238 .endif\r
+ 239 ex de,hl\r
+ 240 \r
+ 241 public ahexw\r
+ 242 \r
+ 243 ahexw::\r
+ 244 ld a,h\r
+ 245 call ahexb\r
+ 246 ld a,l\r
+ 247 \r
+ 248 public ahexb\r
+ 249 \r
+ 250 ahexb::\r
+ 251 push af\r
+ 252 rrca\r
+ 253 rrca\r
+ 254 rrca\r
+ 255 rrca\r
+ 256 call ahexn\r
+ 257 pop af\r
+ 258 \r
+ 259 public ahexn\r
+ 260 \r
+ 261 ahexn::\r
+ 262 and 0fh\r
+ 263 add a,90h\r
+ 264 daa\r
+ 265 adc a,40h\r
+ 266 daa\r
+ 267 jr abyte\r
+ 268 \r
+ 269 public amess\r
+ 270 \r
+ 271 amess::\r
+ 272 ex (sp),hl\r
+ 273 push af\r
+ 274 \r
+ 275 L01$: ld a,(hl)\r
+ 276 inc hl\r
+ 277 or a\r
+ 278 jr z,L02$\r
+ 279 \r
+ 280 call abyte\r
+ 281 jr L01$\r
+ 282 \r
+ 283 L02$: pop af\r
+ 284 ex (sp),hl\r
+ 285 ret\r
+ 286 .endif\r
+ 287 \r
+ 288 ; -----------------------------------------------------------------------------\r
+ 289 \r
+ 290 public _argc, _argv, environ, errno, __cleanup\r
+ 291 ;public __argc, __argv, _environ, _errno, ___cleanup\r
+ 292 \r
+ 293 rseg UDATA0\r
+ 00000000 294 _argc: defs 2 ; vendor __argc\r
+ 00000002 295 _argv: defs 2 ; vendor __argv\r
+ 00000004 296 environ: defs 2 ; vendor _environ\r
+ 00000006 297 errno: defs 2 ; vendor _errno\r
+ 00000008 298 __cleanup: defs 2 ; vendor ___cleanup\r
+ 299 \r
+ 300 rseg CSTACK\r
+ 00000000 301 defs E_STACK_SIZE\r
+ 302 \r
+ 303 ; -----------------------------------------------------------------------------\r
+ 304 \r
+ 00001000 305 END\r
+\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1.\r
+Hexadecimal [32-Bits]\r
+\r
+Symbol Table\r
+\r
+ .__.ABS. = 00000000 G | E_FORMAT_LARGE = 00000001 \r
+ E_MAGIC = 0000A6C9 | E_STACK_SIZE = 00001000 \r
+ 9 __cleanup 00000008 GR | 1 __init 00000000 GR\r
+ 9 _argc 00000000 GR | 9 _argv 00000002 GR\r
+ e_CSTACK ******** GX | 9 environ 00000004 GR\r
+ 9 errno 00000006 GR | exit ******** GX\r
+ l__DEFAULT ******** GX | main ******** GX\r
+ s_CSTACK ******** GX | s_RCODE ******** GX\r
+ s_UDATA0 ******** GX\r
+\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2.\r
+Hexadecimal [32-Bits]\r
+\r
+Area Table\r
+\r
+ 0 _DEFAULT size 14 flags 0\r
+ 1 RCODE size 15 flags 0\r
+ 2 CODE size 0 flags 0\r
+ 3 CONST size 0 flags 0\r
+ 4 CSTR size 0 flags 0\r
+ 5 IDATA0 size 0 flags 1\r
+ 6 CDATA0 size 0 flags 0\r
+ 7 ECSTR size 0 flags 1\r
+ 8 CCSTR size 0 flags 0\r
+ 9 UDATA0 size A flags 0\r
+ A CSTACK size 1000 flags 0\r
--- /dev/null
+
+This is a full uzi build.
+
+It is basically a further development of the 030528 release
+where the major differences are in changes and additions to the
+testsystem.
+
+/uzi/src/testsystem/tter
+
+This program runs in a UNIX environment (Cygwin is OK too)
+and controls the recording and playback of the terminal,
+see tter -? for more. The baudrate is current default at 38400
+
+/uzi/src/kernel/uzi
+
+Here are the changes to the kernel regarding the testsystem.
+Files:
+testsystem.c
+testsystem.h
+touchscreen.c
+touchscreen.h
+devno.h
+
+
+The testsystem is hardcoded to record/playback on Serial 3
+
+The kernel currently comes alive with the testsystem enabled. This
+is for now hardcoded and will be changed in the future to be enabled
+or disabled at will.
+
+This means that currently all device output is redirected to Serial 3
+out and if "tter -r" is listening, is recorded. The recorded data is
+tagged with the device id (UZI minor device number) of its source.
+Format: ESC <minor dev id>
+
+Playback with "tter -p" will redirect the input received on Serial 3
+as if received from the devices concerned.
+
+Commands currently supported via Serial 3 input:
+ESC R Toggles RTC of terminal between internal source (defaulr) or
+ external source
+ESC r Toggles on/off internal source RTC to be routed to Serial 3
+ output in order to be recorded
+
+Note that ESC in the to be recorded data stream is always escaped
+(ESC becomes ESC ESC)
+
+Known problems:
+- <backspace> on the keyboard of the hyperterminal causes an interrupt
+ interference with the testsystem_rx_handler on Serial 3 input. Symptom:
+ hyperterminal shows: testsystem_rx_handler: ERROR port = .., c = ..
+- The testsystem is quite slow during playback. One of the reasons is
+ that each byte during recording is taggged with the device id, thus
+ causes the amount of data to be processed to be trippled. The reason
+ this is that "remembering" the currently active device and tag the
+ data only when it changes, causes conflicts between multiple interrupts
+ happening at the same time. In fact some mutex needs to be used
+ to protect critical data in testsystem_rx_hook. This will be implemented
+ in the next release.
+
--- /dev/null
+Toms AVR macro assembler version 1.18 (May 9 2003)\r
+Copyright (C) 2000 - Tom Mortensen\r
+E-mail: tom@tavrasm.org WWW: http://www.tavrasm.org\r
+\r
++------------------+-----------------------------------------------------------+\r
+| Value | Text |\r
+|------------------|-----------------------------------------------------------|\r
+| | ; TSV3.ASM\r
+| | \r
+| | ; 19FEB02 REVISE FOR GREATER CONTRAST VOLTAGE FOR ALBERT'S 2ND BATCH -15V\r
+| | ; 01FEB02 REVISE FOR 7.3728MHz XTAL (SEE !!!)\r
+| | \r
+| | ; 22JUN01 REVISE -VE VOLTAGE GENERATION\r
+| | ; TO WORK WITH REV E PARTS\r
+| | ; ;!! INDICATES CHANGES\r
+| | \r
+| | ;** INDICATES CHANGES FOR LOW VCC AVR MOD\r
+| | \r
+| | .INCLUDE "8535DEF.INC"\r
+| | ;***************************************************************************\r
+| | ;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y\r
+| | ;* \r
+| | ;* Number :AVR000\r
+| | ;* File Name :"8535def.inc"\r
+| | ;* Title :Register/Bit Definitions for the AT90S8535\r
+| | ;* Date :98.05.22\r
+| | ;* Version :1.22\r
+| | ;* Support telephone :+47 72 88 43 88 (ATMEL Norway)\r
+| | ;* Support fax :+47 72 88 43 99 (ATMEL Norway)\r
+| | ;* Support E-mail :avr@atmel.com\r
+| | ;* Target MCU :AT90S8535\r
+| | ;*\r
+| | ;* DESCRIPTION\r
+| | ;* When including this file in the assembly program file, all I/O register \r
+| | ;* names and I/O register bit names appearing in the data book can be used.\r
+| | ;* In addition, the six registers forming the three data pointers X, Y and\r
+| | ;* Z have been assigned names XL - ZH. Highest RAM address for Internal \r
+| | ;* SRAM is also defined \r
+| | ;*\r
+| | ;* The Register names are represented by their hexadecimal address.\r
+| | ;* \r
+| | ;* The Register Bit names are represented by their bit number (0-7).\r
+| | ;* \r
+| | ;* Please observe the difference in using the bit names with instructions\r
+| | ;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" \r
+| | ;* (skip if bit in register set/cleared). The following example illustrates\r
+| | ;* this:\r
+| | ;* \r
+| | ;* in r16,PORTB ;read PORTB latch\r
+| | ;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)\r
+| | ;* out PORTB,r16 ;output to PORTB\r
+| | ;*\r
+| | ;* in r16,TIFR ;read the Timer Interrupt Flag Register\r
+| | ;* sbrc r16,TOV0 ;test the overflow flag (use bit#)\r
+| | ;* rjmp TOV0_is_set ;jump if set\r
+| | ;* ... ;otherwise do something else\r
+| | ;***************************************************************************\r
+| | \r
+| | ;***** Specify Device\r
+| | .device AT90S8535\r
+| | \r
+| | ;***** I/O Register Definitions\r
+| | .equ SREG =$3f\r
+| | .equ SPH =$3e\r
+| | .equ SPL =$3d\r
+| | .equ GIMSK =$3b\r
+| | .equ GIFR =$3a\r
+| | .equ TIMSK =$39\r
+| | .equ TIFR =$38\r
+| | \r
+| | .equ MCUCR =$35\r
+| | .equ MCUSR =$34\r
+| | \r
+| | .equ TCCR0 =$33\r
+| | .equ TCNT0 =$32\r
+| | \r
+| | .equ TCCR1A =$2f\r
+| | .equ TCCR1B =$2e\r
+| | .equ TCNT1H =$2d\r
+| | .equ TCNT1L =$2c\r
+| | .equ OCR1AH =$2b\r
+| | .equ OCR1AL =$2a\r
+| | .equ OCR1BH =$29\r
+| | .equ OCR1BL =$28\r
+| | .equ ICR1H =$27\r
+| | .equ ICR1L =$26\r
+| | \r
+| | .equ TCCR2 =$25\r
+| | .equ TCNT2 =$24\r
+| | .equ OCR2 =$23\r
+| | .equ ASSR =$22\r
+| | \r
+| | .equ WDTCR =$21\r
+| | .equ EEARH =$1f\r
+| | .equ EEARL =$1e\r
+| | .equ EEDR =$1d\r
+| | .equ EECR =$1c\r
+| | .equ PORTA =$1b\r
+| | .equ DDRA =$1a\r
+| | .equ PINA =$19\r
+| | .equ PORTB =$18\r
+| | .equ DDRB =$17\r
+| | .equ PINB =$16\r
+| | .equ PORTC =$15\r
+| | .equ DDRC =$14\r
+| | .equ PINC =$13\r
+| | .equ PORTD =$12\r
+| | .equ DDRD =$11\r
+| | .equ PIND =$10\r
+| | .equ SPDR =$0f\r
+| | .equ SPSR =$0e\r
+| | .equ SPCR =$0d\r
+| | .equ UDR =$0c\r
+| | .equ USR =$0b\r
+| | .equ UCR =$0a\r
+| | .equ UBRR =$09\r
+| | .equ ACSR =$08\r
+| | .equ ADMUX =$07\r
+| | .equ ADCSR =$06\r
+| | .equ ADCH =$05\r
+| | .equ ADCL =$04\r
+| | \r
+| | \r
+| | ;***** Bit Definitions\r
+| | \r
+| | .equ EXTRF =1\r
+| | .equ PORF =0\r
+| | \r
+| | .equ INT1 =7\r
+| | .equ INT0 =6\r
+| | \r
+| | .equ INTF1 =7\r
+| | .equ INTF0 =6\r
+| | \r
+| | .equ OCIE2 =7\r
+| | .equ TOIE2 =6\r
+| | .equ TICIE1 =5\r
+| | .equ OCIE1A =4\r
+| | .equ OCIE1B =3\r
+| | .equ TOIE1 =2\r
+| | .equ TOIE0 =0\r
+| | \r
+| | .equ OCF2 =7\r
+| | .equ TOV2 =6\r
+| | .equ ICF1 =5\r
+| | .equ OCF1A =4\r
+| | .equ OCF1B =3\r
+| | .equ TOV1 =2\r
+| | .equ TOV0 =0\r
+| | \r
+| | .equ SE =6\r
+| | .equ SM1 =5\r
+| | .equ SM0 =4\r
+| | .equ ISC11 =3\r
+| | .equ ISC10 =2\r
+| | .equ ISC01 =1\r
+| | .equ ISC00 =0\r
+| | \r
+| | .equ CS02 =2\r
+| | .equ CS01 =1\r
+| | .equ CS00 =0\r
+| | \r
+| | .equ COM1A1 =7\r
+| | .equ COM1A0 =6\r
+| | .equ COM1B1 =5\r
+| | .equ COM1B0 =4\r
+| | .equ PWM11 =1\r
+| | .equ PWM10 =0\r
+| | \r
+| | .equ ICNC1 =7\r
+| | .equ ICES1 =6\r
+| | .equ CTC1 =3\r
+| | .equ CS12 =2\r
+| | .equ CS11 =1\r
+| | .equ CS10 =0\r
+| | \r
+| | .equ PWM2 =6\r
+| | .equ COM21 =5\r
+| | .equ COM20 =4\r
+| | .equ CTC2 =3\r
+| | .equ CS22 =2\r
+| | .equ CS21 =1\r
+| | .equ CS20 =0\r
+| | \r
+| | .equ AS2 =3\r
+| | .equ TCN2UB =2\r
+| | .equ OCR2UB =1\r
+| | .equ TCR2UB =0\r
+| | \r
+| | .equ WDDE =4\r
+| | .equ WDE =3\r
+| | .equ WDP2 =2\r
+| | .equ WDP1 =1\r
+| | .equ WDP0 =0\r
+| | \r
+| | .equ EERIE =3\r
+| | .equ EEMWE =2\r
+| | .equ EEWE =1\r
+| | .equ EERE =0\r
+| | \r
+| | .equ PA7 =7\r
+| | .equ PA6 =6\r
+| | .equ PA5 =5\r
+| | .equ PA4 =4\r
+| | .equ PA3 =3\r
+| | .equ PA2 =2\r
+| | .equ PA1 =1\r
+| | .equ PA0 =0\r
+| | \r
+| | .equ DDA7 =7\r
+| | .equ DDA6 =6\r
+| | .equ DDA5 =5\r
+| | .equ DDA4 =4\r
+| | .equ DDA3 =3\r
+| | .equ DDA2 =2\r
+| | .equ DDA1 =1\r
+| | .equ DDA0 =0\r
+| | \r
+| | .equ PINA7 =7\r
+| | .equ PINA6 =6\r
+| | .equ PINA5 =5\r
+| | .equ PINA4 =4\r
+| | .equ PINA3 =3\r
+| | .equ PINA2 =2\r
+| | .equ PINA1 =1\r
+| | .equ PINA0 =0\r
+| | \r
+| | .equ PB7 =7\r
+| | .equ PB6 =6\r
+| | .equ PB5 =5\r
+| | .equ PB4 =4\r
+| | .equ PB3 =3\r
+| | .equ PB2 =2\r
+| | .equ PB1 =1\r
+| | .equ PB0 =0\r
+| | \r
+| | .equ DDB7 =7\r
+| | .equ DDB6 =6\r
+| | .equ DDB5 =5\r
+| | .equ DDB4 =4\r
+| | .equ DDB3 =3\r
+| | .equ DDB2 =2\r
+| | .equ DDB1 =1\r
+| | .equ DDB0 =0\r
+| | \r
+| | .equ PINB7 =7\r
+| | .equ PINB6 =6\r
+| | .equ PINB5 =5\r
+| | .equ PINB4 =4\r
+| | .equ PINB3 =3\r
+| | .equ PINB2 =2\r
+| | .equ PINB1 =1\r
+| | .equ PINB0 =0\r
+| | \r
+| | .equ PC7 =7\r
+| | .equ PC6 =6\r
+| | .equ PC5 =5\r
+| | .equ PC4 =4\r
+| | .equ PC3 =3\r
+| | .equ PC2 =2\r
+| | .equ PC1 =1\r
+| | .equ PC0 =0\r
+| | \r
+| | .equ DDC7 =7\r
+| | .equ DDC6 =6\r
+| | .equ DDC5 =5\r
+| | .equ DDC4 =4\r
+| | .equ DDC3 =3\r
+| | .equ DDC2 =2\r
+| | .equ DDC1 =1\r
+| | .equ DDC0 =0\r
+| | \r
+| | .equ PINC7 =7\r
+| | .equ PINC6 =6\r
+| | .equ PINC5 =5\r
+| | .equ PINC4 =4\r
+| | .equ PINC3 =3\r
+| | .equ PINC2 =2\r
+| | .equ PINC1 =1\r
+| | .equ PINC0 =0\r
+| | \r
+| | .equ PD7 =7\r
+| | .equ PD6 =6\r
+| | .equ PD5 =5\r
+| | .equ PD4 =4\r
+| | .equ PD3 =3\r
+| | .equ PD2 =2\r
+| | .equ PD1 =1\r
+| | .equ PD0 =0\r
+| | \r
+| | .equ DDD7 =7\r
+| | .equ DDD6 =6\r
+| | .equ DDD5 =5\r
+| | .equ DDD4 =4\r
+| | .equ DDD3 =3\r
+| | .equ DDD2 =2\r
+| | .equ DDD1 =1\r
+| | .equ DDD0 =0\r
+| | \r
+| | .equ PIND7 =7\r
+| | .equ PIND6 =6\r
+| | .equ PIND5 =5\r
+| | .equ PIND4 =4\r
+| | .equ PIND3 =3\r
+| | .equ PIND2 =2\r
+| | .equ PIND1 =1\r
+| | .equ PIND0 =0\r
+| | \r
+| | .equ SPIE =7\r
+| | .equ SPE =6\r
+| | .equ DORD =5\r
+| | .equ MSTR =4\r
+| | .equ CPOL =3\r
+| | .equ CPHA =2\r
+| | .equ SPR1 =1\r
+| | .equ SPR0 =0\r
+| | \r
+| | .equ SPIF =7\r
+| | .equ WCOL =6\r
+| | \r
+| | .equ RXC =7\r
+| | .equ TXC =6\r
+| | .equ UDRE =5\r
+| | .equ FE =4\r
+| | ; removed for AVRA / TAVRASM:\r
+| | ;.equ OR =3\r
+| | \r
+| | .equ RXCIE =7\r
+| | .equ TXCIE =6\r
+| | .equ UDRIE =5\r
+| | .equ RXEN =4\r
+| | .equ TXEN =3\r
+| | .equ CHR9 =2\r
+| | .equ RXB8 =1\r
+| | .equ TXB8 =0\r
+| | \r
+| | .equ ACD =7\r
+| | .equ ACO =5\r
+| | .equ ACI =4\r
+| | .equ ACIE =3\r
+| | .equ ACIC =2\r
+| | .equ ACIS1 =1\r
+| | .equ ACIS0 =0\r
+| | \r
+| | .equ MUX2 =2\r
+| | .equ MUX1 =1\r
+| | .equ MUX0 =0\r
+| | \r
+| | .equ ADEN =7\r
+| | .equ ADSC =6\r
+| | .equ ADFR =5\r
+| | .equ ADIF =4\r
+| | .equ ADIE =3\r
+| | .equ ADPS2 =2\r
+| | .equ ADPS1 =1\r
+| | .equ ADPS0 =0\r
+| | \r
+| | .def XL =r26\r
+| | .def XH =r27\r
+| | .def YL =r28\r
+| | .def YH =r29\r
+| | .def ZL =r30\r
+| | .def ZH =r31\r
+| | \r
+| | .equ RAMEND =$25F ;Last On-Chip SRAM location\r
+| | .equ XRAMEND =$25F\r
+| | .equ E2END =$1FF\r
+| | .equ FLASHEND=$FFF\r
+| | \r
+| | .equ INT0addr=$001 ;External Interrupt0 Vector Address\r
+| | .equ INT1addr=$002 ;External Interrupt1 Vector Address\r
+| | .equ OC2addr =$003 ;Timer2 compare match Vector Address\r
+| | .equ OVF2addr=$004 ;Timer2 overflow Vector Address\r
+| | .equ ICP1addr=$005 ;Timer1 Input Capture Vector Address\r
+| | .equ OC1Aaddr=$006 ;Timer1 Output Compare A Interrupt Vector Address\r
+| | .equ OC1Baddr=$007 ;Timer1 Output Compare B Interrupt Vector Address\r
+| | .equ OVF1addr=$008 ;Overflow1 Interrupt Vector Address\r
+| | .equ OVF0addr=$009 ;Overflow0 Interrupt Vector Address\r
+| | .equ SPIaddr =$00A ;SPI Interrupt Vector Address\r
+| | .equ URXCaddr=$00B ;UART Receive Complete Interrupt Vector Address\r
+| | .equ UDREaddr=$00C ;UART Data Register Empty Interrupt Vector Address\r
+| | .equ UTXCaddr=$00D ;UART Transmit Complete Interrupt Vector Address\r
+| | .equ ADCCaddr=$00E ;ADC Conversion Complete Interrupt Vector Address\r
+| | .equ ERDYaddr=$00F ;EEPROM Write Complete Interrupt Vector Address\r
+| | .equ ACIaddr =$010 ;Analog Comparator Interrupt Vector Address\r
+| | .INCLUDE "MAC.INC"\r
+| | ; MAC.INC\r
+| | ; MACROS FOR THE AVR PROCESSOR\r
+| | \r
+| | .MACRO RJEQ\r
+| | BRNE LOCAL\r
+| | RJMP @0\r
+| | LOCAL:\r
+| | .endMACRO\r
+| | \r
+| | .MACRO RJNE\r
+| | BREQ LOCAL\r
+| | RJMP @0\r
+| | LOCAL:\r
+| | .endMACRO\r
+| | \r
+| | .MACRO OUTI @0,@1\r
+| | LDI A,@1 ; OUT IMMEDIATE TO PORT\r
+| | OUT @0,A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO ADDI @0,@1\r
+| | SUBI @0,-@1 ; ADD IMMEDIATE\r
+| | .endMACRO\r
+| | \r
+| | .MACRO EORI @0,@1\r
+| | LDI A,@1 ; EOR IMMEDIATE\r
+| | EOR @0,A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO STI @0,@1\r
+| | LDI A,@1 ; STORE IMMEDIATE\r
+| | ST @0,A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO ADDIL @0,@1\r
+| | LDI A,@1 ; ADD IMMEDIATE LOWER REGISTER SET\r
+| | ADD @0,A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO SUBIL @0,@1\r
+| | LDI A,@1 ; ADD IMMEDIATE LOWER REGISTER SET\r
+| | SUB @0,A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO ANDIL @0,@1\r
+| | LDI A,@1 ; AND IMMEDIATE LOWER REGISTER SET\r
+| | AND @0,A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LDIL @0,@1\r
+| | LDI A,@1 ; LOAD IMMEDIATE LOWER REGISTER SET\r
+| | MOV @0,A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LDIX @0 ; LOAD IMMEDIATE XL, XH WITH FLASH ADDRESS\r
+| | LDI XL,LOW((@0)*2) ; USE AS BYTE COUNTER\r
+| | LDI XH,HIGH((@0)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LDIZ @0 ; LOAD IMMEDIATE ZL, ZH WITH FLASH ADDRESS\r
+| | LDI ZL,LOW((@0)*2) ; USE PRIOR TO LPM INSTRUCTION\r
+| | LDI ZH,HIGH((@0)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LDE @0,@1 ; LOAD REGISTER FROM EEPROM\r
+| | RCALL LDE1\r
+| | LDI @0,LOW(@1*2) ; POINT TO EEPROM CONSTANT\r
+| | OUT EEAR,@0 ; SET UP ADDRESS\r
+| | SBI EECR,EERE ; ASSERT READ STROBE\r
+| | IN @0,EEDR\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LDFL @0,@1 ; LOAD REGISTER FROM FLASH LOW BYTE\r
+| | LDI ZL,LOW(@1*2)\r
+| | LDI ZH,HIGH(@1*2)\r
+| | LPM\r
+| | MOV @0,R0\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LDFH @0,@1 ; LOAD REGISTER FROM FLASH HIGH BYTE\r
+| | LDI ZL,LOW(@1*2+1)\r
+| | LDI ZH,HIGH(@1*2+1)\r
+| | LPM\r
+| | MOV @0,R0\r
+| | .endMACRO\r
+| | \r
+| | ;.MACRO LDF @0,@1 ; LOAD REGISTER FROM FLASH\r
+| | ; LDI ZL,@1 ; POINT TO FLASH CONSTANT\r
+| | ; LPM\r
+| | ; MOV @0,R0\r
+| | ;.ENDMACRO\r
+| | \r
+| | ;------------------------------------------------------------------------------\r
+| | \r
+| | .MACRO FLD @0 ; LOAD FA REGISTER FROM SRAM ARGUMENT\r
+| | LDI YL,LOW(@0) ; POINT TO SRAM ARGUMENT\r
+| | RCALL LDS_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FLDF @0 ; LOAD FA REGISTER FROM FLASH CONSTANT\r
+| | LDI ZL,LOW(@0*2) ; POINT TO FLASH CONSTANT\r
+| | LDI ZH,HIGH(@0*2)\r
+| | RCALL LDF_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FLDE @0 ; LOAD FA REGISTER FROM EEPROM CONSTANT\r
+| | LDI ZL,LOW(@0*2) ; POINT TO EEPROM CONSTANT\r
+| | RCALL LDE_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FLD3 @0 ; LOAD FA REGISTER WITH 3 BYTE SRAM INTEGER\r
+| | LDI YL,LOW(@0) ; POINT TO SOURCE\r
+| | RCALL LDS3_FA ; CONVERT TO INTERNAL FP FORMAT\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FLD2 @0 ; LOAD FA REGISTER WITH 2 BYTE SRAM INTEGER\r
+| | LDI YL,LOW(@0) ; POINT TO SOURCE\r
+| | RCALL LDS2_FA ; CONVERT TO INTERNAL FP FORMAT\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FST @0 ; STORE FP REGISTER TO FP ARGUMENT\r
+| | LDI YL,LOW(@0) ; POINT TO SRAM ARGUMENT\r
+| | RCALL STS_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FCHS @0 ; CHANGE SIGN OF SRAM ARGUMENT\r
+| | LDI YL,LOW(@0)\r
+| | RCALL CHSS\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FAD @0 ; ADD SRAM ARGUMENT TO FA REGISTER\r
+| | LDI YL,LOW(@0) ; POINT TO SRAM ARGUMENT\r
+| | RCALL ADD_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FADF @0 ; ADD FLASH CONSTANT TO FA REGISTER\r
+| | LDI ZL,LOW(@0*2) ; POINT TO FLASH CONSTANT\r
+| | LDI ZH,HIGH(@0*2)\r
+| | RCALL ADDF_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FADE @0 ; ADD EEPROM CONSTANT TO FA REGISTER\r
+| | LDI ZL,LOW(@0*2) ; POINT TO EEPROM CONSTANT\r
+| | RCALL ADDE_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FSB @0 ; SUBTRACT SRAM ARGUMENT FROM FA REGISTER\r
+| | LDI YL,LOW(@0) ; POINT TO SRAM ARGUMENT\r
+| | RCALL SUB_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FSBF @0 ; SUBTRACT FLASH CONSTANT FROM FA REGISTER\r
+| | LDI ZL,LOW(@0*2) ; POINT TO FLASH CONSTANT\r
+| | LDI ZH,HIGH(@0*2)\r
+| | RCALL SUBF_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FML @0 ; MULTIPLY FA REGISTER BY SRAM ARGUMENT\r
+| | LDI YL,LOW(@0) ; POINT TO SRAM ARGUMENT\r
+| | RCALL MUL_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FMLF @0 ; MULTIPLY FA REGISTER BY FLASH CONSTANT\r
+| | LDI ZL,LOW(@0*2) ; POINT TO FLASH CONSTANT\r
+| | LDI ZH,HIGH(@0*2)\r
+| | RCALL MULF_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FDV @0 ; DIVIDE FA REGISTER BY SRAM ARGUMENT\r
+| | LDI YL,LOW(@0) ; POINT TO SRAM ARGUMENT\r
+| | RCALL DIV_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FDVF @0 ; DIVIDE FA REGISTER BY FLASH CONSTANT\r
+| | LDI ZL,LOW(@0*2) ; POINT TO FLASH CONSTANT\r
+| | LDI ZH,HIGH(@0*2)\r
+| | RCALL DIVF_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FCP @0 ; COMPARE FA REGISTER WITH SRAM ARGUMENT\r
+| | LDI YL,LOW(@0) ; POINT TO SRAM ARGUMENT\r
+| | RCALL CP_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FCPF @0 ; COMPARE FA REGISTER WITH FLASH CONSTANT\r
+| | LDI ZL,LOW(@0*2) ; POINT TO FLASH CONSTANT\r
+| | LDI ZH,HIGH(@0*2)\r
+| | RCALL CPF_FA\r
+| | .endMACRO\r
+| | \r
+| | .MACRO FCPE @0 ; COMPARE FA REGISTER WITH EEPROM CONSTANT\r
+| | LDI ZL,LOW(@0*2) ; POINT TO FLASH CONSTANT\r
+| | RCALL CPE_FA\r
+| | .endMACRO\r
+| | \r
+| | \r
+| | .INCLUDE "APITS.INC" ; NOT API.INC BECAUSE APITS.INC ALSO HAS TURNON COMMAND\r
+| | ; APITS.INC\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | ; API BUS FOREGROUND TASK\r
+| | \r
+| | .MACRO INT_HANDLERS\r
+| | RJMP RX_COMPLETE ; UART RX COMPLETE HANDLER\r
+| | RJMP TX_EMPTY ; UART DATA REGISTER EMPTY HANDLER\r
+| | RJMP TX_COMPLETE ; UART TX COMPLETE HANDLER\r
+| | .endMACRO\r
+| | \r
+| | .MACRO INIT_API_BUS\r
+| | LDI A,API_RATE_SLOW ; 4800 BPS\r
+| | OUT UBRR,A ; SET UART RATE\r
+| | \r
+| | LDI A,$90 ; ENABLE RX WITH INTERRUPTS\r
+| | OUT UCR,A\r
+| | ;SBI UCR,TXEN ; TX ENABLE\r
+| | \r
+| | CLR TX_PTR\r
+| | CLR TX_COUNT\r
+| | \r
+| | CLR RX_PTR\r
+| | CLR RX_COUNT\r
+| | \r
+| | CLR API_STATE\r
+| | CLR API_REMAIN\r
+| | CLR API_WATCHDOG\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MRX_WAIT\r
+| | TST RX_COUNT\r
+| | BREQ RX_WAIT\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MRX_CHAR\r
+| | PUSH YL\r
+| | PUSH YH\r
+| | \r
+| | MOV YL,RX_PTR\r
+| | SUBI YL,-RX_BUF\r
+| | CLR YH\r
+| | LD A,Y\r
+| | \r
+| | CLI\r
+| | DEC RX_COUNT\r
+| | INC RX_PTR\r
+| | LDI YL,RX_SIZE-1\r
+| | AND RX_PTR,YL\r
+| | SEI\r
+| | \r
+| | POP YH\r
+| | POP YL\r
+| | RET\r
+| | ; FALL INTO MTX_WAIT FOR LOOPBACK TEST\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MTX_WAIT\r
+| | PUSH A\r
+| | TX_WAIT_LOOP:\r
+| | WDR ; 10OCT02 ALTHOUGH IT USUALLY DOESN'T MATTER (HANDY FOR LOOPBACK)\r
+| | MOV A,TX_COUNT\r
+| | CPI A,TX_SIZE\r
+| | BRSH TX_WAIT_LOOP\r
+| | POP A\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MTX_CHAR\r
+| | PUSH YL\r
+| | PUSH YH\r
+| | IN YH,SREG\r
+| | CLI\r
+| | MOV YL,TX_COUNT\r
+| | ADD YL,TX_PTR\r
+| | OUT SREG,YH ;SEI\r
+| | ANDI YL,TX_SIZE-1\r
+| | SUBI YL,-TX_BUF\r
+| | CLR YH\r
+| | ST Y,A\r
+| | \r
+| | INC TX_COUNT\r
+| | \r
+| | POP YH\r
+| | POP YL\r
+| | RET\r
+| | .endMACRO\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | ; API BUS BACKGROUND TASK\r
+| | \r
+| | .MACRO MTX_EMPTY\r
+| | IN SR,SREG\r
+| | PUSH F\r
+| | \r
+| | LDI F,-API_TIMEOUT ; FEED TX/RX WATCHDOG\r
+| | MOV API_WATCHDOG,F\r
+| | \r
+| | PUSH ZL\r
+| | PUSH ZH\r
+| | MOV ZL,TX_PTR\r
+| | SUBI ZL,-TX_BUF\r
+| | CLR ZH\r
+| | LD F,Z ; GET CHARACTER FROM TX BUFFER\r
+| | POP ZH\r
+| | POP ZL\r
+| | \r
+| | OUT UDR,F\r
+| | \r
+| | DEC TX_COUNT\r
+| | INC TX_PTR\r
+| | LDI F,TX_SIZE-1\r
+| | AND TX_PTR,F\r
+| | \r
+| | DEC API_REMAIN ; MORE TO SEND?\r
+| | BRMI GO_API_DONE1 ; YES, AWAIT NEXT TX EMPTY INTERRUPT\r
+| | RJMP API_REINIT ; NO, AWAIT NEXT DATA SIZE COMMAND\r
+| | GO_API_DONE1:\r
+| | RJMP API_DONE\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MRX_COMPLETE\r
+| | IN SR,SREG\r
+| | PUSH F\r
+| | \r
+| | LDI F,-API_TIMEOUT ; FEED TX/RX WATCHDOG\r
+| | MOV API_WATCHDOG,F\r
+| | \r
+| | IN F,UDR\r
+| | SBIC USR,FE ; BREAK DETECTED?\r
+| | RJMP API_FRAMING_ERROR\r
+| | \r
+| | SBRC API_STATE,APIDATA\r
+| | RJMP API_RX_DATA ; WITH F = CHARACTER\r
+| | SBRC API_STATE,APISIZE\r
+| | RJMP API_DATA_SIZE ; WITH F = CHARACTER\r
+| | \r
+| | ; RECEIVED 4800 BPS ADDRESS COMMAND\r
+| | CPI F,API_ADDRESS ; CHARACTER = MY ADDRESS?\r
+| | BRNE API_ADDRESS_DONE\r
+| | \r
+| | LDI F,API_RATE_FAST ; 115200 BPS\r
+| | OUT UBRR,F ; SET UART RATE\r
+| | \r
+| | SBI UCR,TXEN ; ENABLE UART TX AND TXD PIN\r
+| | \r
+| | LDI F,1<<APISIZE\r
+| | OR API_STATE,F ; SAY WE ARE EXPECTING DATA SIZE CMD\r
+| | RJMP API_DONE\r
+| | \r
+| | API_ADDRESS_DONE:\r
+| | CPI F,$AA ; CHARACTER = TURNON COMMAND?\r
+| | BRNE API_TURNON_DONE\r
+| | LDI F,0\r
+| | STS TURNON_COUNT,F ; REQUEST IMMEDIATE TURNON\r
+| | API_TURNON_DONE:\r
+| | ; 18DEC01 RESTORED IT TO NORMAL FOR HYT1500 RELEASE\r
+| | ; CPI F,9 ; REALLY A VALID ADDRESS COMMAND?\r
+| | ; BRLO API_BAD_DONE ; YES, ALL IS OK (IT WAS SOMEONE ELSE)\r
+| | ; PUSH ZL ; NO, WARN THAT THE BUS HAS ERRORS\r
+| | ; PUSH ZH\r
+| | ; MOV ZL,RX_COUNT\r
+| | ; CPI ZL,RX_SIZE\r
+| | ; BRSH API_BAD_SKIP\r
+| | ; ADD ZL,RX_PTR\r
+| | ; ANDI ZL,RX_SIZE-1\r
+| | ; SUBI ZL,-RX_BUF\r
+| | ; CLR ZH\r
+| | ; LDI F,'*' ; DIAGNOSTIC INDICATOR FOR BAD COMMAND\r
+| | ; ST Z,F ; SAVE CHARACTER IN RX BUFFER\r
+| | ; INC RX_COUNT\r
+| | ;API_BAD_SKIP:\r
+| | ; POP ZH\r
+| | ; POP ZL\r
+| | ;API_BAD_DONE:\r
+| | RJMP API_DONE\r
+| | \r
+| | API_DATA_SIZE:\r
+| | ; RECEIVED DATA SIZE COMMAND\r
+| | MOV API_REMAIN,F\r
+| | \r
+| | LDI F,RX_SIZE\r
+| | SUB F,RX_COUNT ; F = AVAILABLE RX BUFFER\r
+| | BRPL RX_RESPOND_F\r
+| | LDI F,$7F ; F = MAXIMUM POSSIBLE TRANSFER COUNT\r
+| | \r
+| | RX_RESPOND_F:\r
+| | TST API_REMAIN ; TEST TRANSFER DIRECTION\r
+| | BRPL RX_RESPOND ; USE F IF WE NEED TO RECEIVE\r
+| | \r
+| | MOV F,TX_COUNT\r
+| | ORI F,$80 ; F = QUEUED TX CHARACTERS\r
+| | \r
+| | RX_RESPOND:\r
+| | ; SEND DATA SIZE RESPONSE\r
+| | ; API_REMAIN = HOST MAX, F = OUR MAX\r
+| | OUT UDR,F ; SEND DATA SIZE RESPONSE\r
+| | \r
+| | CP F,API_REMAIN\r
+| | BRSH RX_RESPOND_OK\r
+| | MOV API_REMAIN,F ; API_REMAIN = LESSER OUR / HOST MAX\r
+| | \r
+| | RX_RESPOND_OK:\r
+| | MOV F,API_REMAIN\r
+| | ANDI F,$7F ; NULL REQUEST?\r
+| | BREQ API_NULL ; YES, REVERT TO 4800 WHEN TX COMPLETE\r
+| | ; NO, AWAIT RX COMPLETE / TX EMPTY INT\r
+| | LDI F,1<<APIDATA | 1<<APISIZE\r
+| | OR API_STATE,F ; WE ARE EXPECTING TO TRANSFER DATA\r
+| | \r
+| | DEC API_REMAIN ; NUDGE FOR BRPL / BRMI ALGORITHM\r
+| | BRPL API_DONE ; WE WILL RECEIVE, NO FURTHER ACTION\r
+| | \r
+| | CBI UCR,RXCIE ; DISABLE UART RX COMPLETE INTERRUPT\r
+| | SBI UCR,UDRIE ; ENABLE UART DATA REGISTER EMPTY INT\r
+| | RJMP API_DONE\r
+| | \r
+| | API_NULL:\r
+| | LDI F,~(1<<APISIZE)\r
+| | AND API_STATE,F ; IN CASE NO DATA TRANSFERRED\r
+| | \r
+| | SBI UCR,TXCIE ; ENABLE UART TX COMPLETE INTERRUPT\r
+| | SBI USR,TXC ; CLEAR UART TX COMPLETE PENDING BIT\r
+| | RJMP API_DONE\r
+| | \r
+| | API_RX_DATA:\r
+| | ; RECEIVED DATA BYTE, SAVE IT\r
+| | ; OUT UDR,API_REMAIN\r
+| | \r
+| | PUSH ZL\r
+| | PUSH ZH\r
+| | MOV ZL,RX_COUNT\r
+| | ADD ZL,RX_PTR\r
+| | ANDI ZL,RX_SIZE-1\r
+| | SUBI ZL,-RX_BUF\r
+| | CLR ZH\r
+| | ST Z,F ; SAVE CHARACTER IN RX BUFFER\r
+| | POP ZH\r
+| | POP ZL\r
+| | \r
+| | INC RX_COUNT\r
+| | \r
+| | DEC API_REMAIN ; MORE TO RECEIVE?\r
+| | BRPL API_DONE ; YES, AWAIT NEXT RX COMPLETE INTERRUPT\r
+| | RJMP API_REVERT ; NO, AWAIT NEXT DATA SIZE COMMAND\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MTX_COMPLETE\r
+| | IN SR,SREG\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MAPI_TIMEOUT_ERROR\r
+| | PUSH F\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MAPI_FRAMING_ERROR\r
+| | CBI UCR,TXEN ; DISABLE UART TX AND TXD PIN\r
+| | LDI F,API_RATE_SLOW ; 4800 BPS IF EXPECTING ADDRESS COMMAND\r
+| | OUT UBRR,F ; SET UART RATE\r
+| | \r
+| | LDI F,~(1<<APISIZE)\r
+| | AND API_STATE,F ; EXPECTING ADDRESS COMMAND\r
+| | CLR API_WATCHDOG ; NO ACTION, JUST WAIT TO RECEIVE ADDR\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MAPI_REINIT\r
+| | CBI UCR,UDRIE ; DISABLE UART TX EMPTY INTERRUPT\r
+| | CBI UCR,TXCIE ; DISABLE UART TX COMPLETE INTERRRUPT\r
+| | SBI UCR,RXCIE ; ENABLE UART RX COMPLETE INTERRUPT\r
+| | IN F,UDR ; CLEAR UART RX COMPLETE PENDING BIT\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MAPI_REVERT\r
+| | LDI F,~(1<<APIDATA)\r
+| | AND API_STATE,F ; EXPECTING ADDRESS / DATA SIZE COMMAND\r
+| | .endMACRO\r
+| | \r
+| | .MACRO MAPI_DONE\r
+| | POP F\r
+| | OUT SREG,SR\r
+| | RETI\r
+| | .endMACRO\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | ; API BUS TIMER INTERRUPT\r
+| | \r
+| | .MACRO MAPI_TIMER\r
+| | TST API_WATCHDOG\r
+| | BREQ API_OKAY\r
+| | INC API_WATCHDOG ; SEE IF API BUS WAS LEFT HANGING\r
+| | BRNE API_OKAY\r
+| | RJMP API_TIMEOUT_ERROR ; IF SO THEN RESET TO GET NEXT COMMAND\r
+| | API_OKAY: ; OTHERWISE RETURN FROM INTERRUPT\r
+| | .endMACRO\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | \r
+| | ;.INCLUDE "TERTS.INC" ; NOT TER.INC BECAUSE FLAGS IN LOWER HALF OF REGISTER SET\r
+| | \r
+| | .LISTMAC\r
+| | .MACRO LDIYADR ; POINT Y TO DSPRAM ADDR\r
+| | LDI YH,HIGH(@0>>6)\r
+| | STS XPAGE,YH\r
+| | RCALL ADRYP ; AND SET XPAGE\r
+| | LDI YH,HIGH(@0<<2)\r
+| | LDI YL,(LOW(@0) & $3F) | (HIGH(@0) & $C0)\r
+| | .endMACRO\r
+| | \r
+| | .MACRO ADRL\r
+| | OUT PORTC,@0 ; SET L ADDRESS FOR DSPRAM\r
+| | .endMACRO\r
+| | \r
+| | .MACRO ADRH\r
+| | OUT PORTA,@0 ; SET H ADDRESS FOR DSPRAM\r
+| | SBI PORTB,3\r
+| | CBI PORTB,3\r
+| | STS LATCH11_SAV,@0 ; IS THIS NEEDED?\r
+| | .endMACRO\r
+| | \r
+| | ;.MACRO ADRINC\r
+| | ; INC @0 ; INC LOW ORDER DSPRAM ADDRESS\r
+| | ; SBRC @0,6 ; ROLLS OVER IF BIT 6 SET\r
+| | ;; RCALL INCADRY ; INC HIGH ORDER DSPRAM ADDRESS\r
+| | ;.ENDMACRO ; (RCALL IS IN MAINLINE CODE)\r
+| | \r
+| | .MACRO A0_A13\r
+| | MOV R19,@0\r
+| | ANDI R19,$3F\r
+| | OUT PORTC,R19\r
+| | \r
+| | MOV R19,@1\r
+| | LSL R19\r
+| | LSL R19\r
+| | BST @0,7 ; A7\r
+| | BLD R19,1\r
+| | BST @0,6 ; A6\r
+| | BLD R19,0\r
+| | OUT PORTA,R19\r
+| | CLI\r
+| | SBI PORTB,3\r
+| | CBI PORTB,3\r
+| | SEI\r
+| | STS LATCH11_SAV,R19\r
+| | .endMACRO\r
+| | \r
+| | .MACRO A14_A18\r
+| | CLI\r
+| | LDS R19,LATCH10_SAV ; AND THIS\r
+| | EOR R19,@0\r
+| | ANDI R19,$E0\r
+| | EOR R19,@0\r
+| | OUT PORTA,R19\r
+| | SBI PORTB,4\r
+| | CBI PORTB,4\r
+| | SEI\r
+| | STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| | .endMACRO\r
+| | \r
+| | .MACRO A0_A15\r
+| | PUSH R19\r
+| | \r
+| | MOV R19,@0\r
+| | ANDI R19,$3F\r
+| | OUT PORTC,R19\r
+| | \r
+| | MOV R19,@1\r
+| | LSL R19\r
+| | LSL R19\r
+| | BST @0,7 ; A7\r
+| | BLD R19,1\r
+| | BST @0,6 ; A6\r
+| | BLD R19,0\r
+| | OUT PORTA,R19\r
+| | SBI PORTB,3\r
+| | CBI PORTB,3\r
+| | STS LATCH11_SAV,@1\r
+| | \r
+| | LDS R19,LATCH10_SAV ; AND THIS\r
+| | BST @1,7 ; A15\r
+| | BLD R19,1\r
+| | BST @1,6 ; A14\r
+| | BLD R19,0\r
+| | OUT PORTA,R19\r
+| | SBI PORTB,4\r
+| | CBI PORTB,4\r
+| | STS LATCH10_SAV,R19\r
+| | \r
+| | POP R19\r
+| | .endMACRO\r
+| | \r
+| | .MACRO RAMWR\r
+| | OUT PORTA,@0\r
+| | CLI\r
+| | CBI PORTB,1\r
+| | CBI PORTB,0\r
+| | NOP\r
+| | SBI PORTB,0\r
+| | SEI\r
+| | SBI PORTB,1\r
+| | .endMACRO\r
+| | \r
+| | .MACRO RAMWRX\r
+| | OUT PORTA,@0\r
+| | CBI PORTB,1\r
+| | CBI PORTB,0\r
+| | NOP\r
+| | SBI PORTB,0\r
+| | SBI PORTB,1\r
+| | .endMACRO\r
+| | \r
+| | .MACRO RAMRXW\r
+| | CLR @1\r
+| | OUT DDRA,@1\r
+| | CLI\r
+| | CBI PORTB,0\r
+| | NOP\r
+| | CBI PORTB,1\r
+| | IN @1,PINA\r
+| | EOR @0,@1\r
+| | SBRC FLAGS,0\r
+| | OR @0,@1\r
+| | LDI @1,$FF\r
+| | OUT DDRA,@1\r
+| | OUT PORTA,@0\r
+| | NOP\r
+| | SBI PORTB,0\r
+| | SEI\r
+| | SBI PORTB,1\r
+| | .endMACRO\r
+| | \r
+| | .MACRO RAMRD\r
+| | CLR F\r
+| | OUT DDRA,F ; PORTA INPUT\r
+| | CLI\r
+| | CBI PORTB,0 ; CS_ON\r
+| | NOP\r
+| | SBI PORTB,0 ; CS_OFF\r
+| | IN @0,PINA ; READ DATA\r
+| | SEI\r
+| | LDI F,$FF\r
+| | OUT DDRA,F ; PORTA OUTPUT\r
+| | .endMACRO\r
+| | \r
+| | .MACRO RAMRDX\r
+| | CLR F\r
+| | OUT DDRA,F ; PORTA INPUT\r
+| | CBI PORTB,0 ; CS_ON\r
+| | NOP\r
+| | SBI PORTB,0 ; CS_OFF\r
+| | IN @0,PINA ; READ DATA\r
+| | LDI F,$FF\r
+| | OUT DDRA,F ; PORTA OUTPUT\r
+| | .endMACRO\r
+| | \r
+| | .MACRO PHOTO\r
+| | OUT PORTA,@0 ; SELECT PHOTODIODE CHANNEL\r
+| | LDS @0,LATCH12_SAV\r
+| | OUT PORTC,@0\r
+| | SBI PORTC,0\r
+| | SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| | CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| | CBI PORTC,0\r
+| | SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| | CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LED\r
+| | OUT PORTA,@0 ; MAIN LED DRIVE PORT\r
+| | LDS @0,LATCH12_SAV\r
+| | OUT PORTC,@0\r
+| | SBI PORTC,1\r
+| | SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| | CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| | CBI PORTC,1\r
+| | SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| | CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LEDLO\r
+| | LDS D,LATCH12_SAV ; DRIVE LED COMMON LO\r
+| | CBR D,1<<4\r
+| | OUT PORTC,D\r
+| | SBI PORTB,2\r
+| | CBI PORTB,2\r
+| | STS LATCH12_SAV,D\r
+| | .endMACRO\r
+| | \r
+| | .MACRO LEDHI\r
+| | LDS D,LATCH12_SAV ; DRIVE LED COMMON HI\r
+| | SBR D,1<<4\r
+| | OUT PORTC,D\r
+| | SBI PORTB,2\r
+| | CBI PORTB,2\r
+| | STS LATCH12_SAV,D\r
+| | .endMACRO\r
+| | \r
+| | .MACRO SPKHI\r
+| | LDS D,LATCH12_SAV ; DRIVE SPEAKER HI\r
+| | SBR D,1<<3\r
+| | CBR D,1<<2\r
+| | OUT PORTC,D\r
+| | SBI PORTB,2\r
+| | CBI PORTB,2\r
+| | STS LATCH12_SAV,D\r
+| | .endMACRO\r
+| | \r
+| | .MACRO SPKLO\r
+| | LDS D,LATCH12_SAV ; DRIVE SPEAKER LO\r
+| | CBR D,1<<3\r
+| | SBR D,1<<2\r
+| | OUT PORTC,D\r
+| | SBI PORTB,2\r
+| | CBI PORTB,2\r
+| | STS LATCH12_SAV,D\r
+| | .endMACRO\r
+| | \r
+| | .MACRO SPKOFF\r
+| | LDS D,LATCH12_SAV ; DRIVE SPEAKER OFF\r
+| | CBR D,1<<3\r
+| | CBR D,1<<2\r
+| | OUT PORTC,D\r
+| | SBI PORTB,2\r
+| | CBI PORTB,2\r
+| | STS LATCH12_SAV,D\r
+| | .endMACRO\r
+| | \r
+| | .EQU T1_INIT =-818 ;$FB35\r
+| | .EQU T1_FULL_SCALE =-716 ;50.0HZ ; SETS LCD FRAME RATE TEMPORARY TO STOP FLIKER\r
+| | ;.EQU T1_FULL_SCALE =-651 ;53.5HZ ; SETS LCD FRAME RATE\r
+| | ;.EQU T1_FULL_SCALE =-600 ;54.8HZ ; SETS LCD FRAME RATE\r
+| | \r
+| | .EQU CONTRAST_LONG =-340 ; ALL LONG PULSES IS FULLY DARK (DON'T SATURATE)\r
+| | ;.EQU CONTRAST_LONG =-250 ; ALL LONG PULSES IS FULLY DARK (DON'T SATURATE)\r
+| | .EQU CONTRAST_MID =-200\r
+| | .EQU CONTRAST_SHORT = -43 ; ALL SHORT PULSES IS FULLY LIGHT\r
+| | \r
+| | .EQU VCC_NOMINAL =-552 ;$FCC4\r
+| | \r
+| | .EQU VEE_MIN =-710 ; MIN IS FULLY DARK\r
+| | .EQU VEE_INIT =-340\r
+| | .EQU VEE_MAX = -43 ; MAX IS FULLY LIGHT\r
+| | \r
+| | ; WHEN VCC = $FCC4 FOR 6.0V:\r
+| | .EQU CONTRAST_MIN =-710 ; MIN IS FULLY DARK\r
+| | .EQU CONTRAST_INIT =-640\r
+| | .EQU CONTRAST_MAX =-580 ; MAX IS FULLY LIGHT\r
+| | \r
+| | ; GENEROUS LIMITS FOR EXPERIMENTATION:\r
+| | ;.EQU CONTRAST_MIN =$FC80 ; MIN IS FULLY DARK\r
+| | ;.EQU CONTRAST_MAX =$FF80 ; MAX IS FULLY LIGHT\r
+| | ;.EQU CONTRAST_INIT =$FE10\r
+| | \r
+| | .EQU CONTRAST_STEP =4\r
+| | \r
+| | .EQU DISP_DSPRAM =$60000 ; DISPLAY BUFFER\r
+| | .EQU DRAW_DSPRAM =$62000 ; DRAWING BUFFER\r
+| | .EQU CHSET_DSPRAM =$64000 ; START OF CHARACTER SETS\r
+| | .EQU RTN_DSPRAM =$6E000 ; KEYBOARD RETURN CODE TABLE\r
+| | .EQU DISPLAY_LINES =$80\r
+| | .EQU CHARACTER_SETS =10\r
+| | .EQU RAM =$60 ; START OF SRAM\r
+| | .EQU TX_SIZE =$20\r
+| | .EQU RX_SIZE =$80\r
+| | \r
+| | .EQU TK_LED_PULSE =14 ; 18US ?? CLOCKS OF /8\r
+| | .EQU TK_DELAY_0 =19 ; ??US DELAY TILL START OF LED PULSE (/8)\r
+| | ;.EQU TK_DELAY_0 =$20 ;$38 ; ??US DELAY TILL START OF LED PULSE\r
+| | ;.EQU TK_DELAY_0 =$25 ;$38 ; 54US ?? CLOCKS OF /8\r
+| | .EQU TK_DELAY_1 =$10 ;$28 ; CLOCKS OF /64, CHANNEL SELECT DELAY\r
+| | .EQU TK_DELAY_2 =$00 ; CLOCKS OF /1024, VDD POWER ON DELAY\r
+| | ; $D0 IS TOO SHORT, $E0 SEEMS TO WORK\r
+| | \r
+| | .EQU API_ADDRESS =$02 ; TOUCHSCREEN ADDRESS\r
+| | .EQU API_TIMEOUT =33 ;50 ; 50 * 100 uSEC = APPROX 5mSEC\r
+| | .EQU API_RATE_SLOW =$5F ;$8F ; DIVISOR FOR 4800 BPS\r
+| | .EQU API_RATE_FAST =$03 ;$05 ; DIVISOR FOR 115200 BPS\r
+| | .EQU EEWR_ENABLE =5 ; SET BY FG WHILE OK TO WRITE EEPROM\r
+| | .EQU APISIZE =6 ; SET IF EXPECTING API DATA SIZE CMD\r
+| | .EQU APIDATA =7 ; SET IF TRANSFERRING API DATA TX/RX\r
+| | \r
+| | .DEF PATTERN =R0 ; FOR HALFTONE_RECT ROUTINE\r
+| | .DEF SR =R1\r
+| | .DEF RX_PTR =R2\r
+| | .DEF RX_COUNT =R3\r
+| | .DEF TX_PTR =R4\r
+| | .DEF TX_COUNT =R5\r
+| | .DEF API_REMAIN =R6\r
+| | .DEF API_WATCHDOG =R12\r
+| | \r
+| | .DEF Y_SIZE =R7\r
+| | .DEF X_SIZE =R8\r
+| | .DEF LINE_CNT =R9\r
+| | .DEF XBYTE =R10\r
+| | .DEF FLAGS =R11\r
+| | ; FLAGS BIT 0 0=XOR MODE 1=OR MODE\r
+| | ; BIT 1 0=FILL RECT 1=CLEAR RECT\r
+| | ; BIT 2 0=OPEN ZEROS 1=CROSSED ZEROS\r
+| | ; BIT 3 0=TEXT MODE 1=GRAPHICS MODE\r
+| | ; BIT 4 0=FIXED 1=PROPORTIONAL\r
+| | ; BIT 5 0=DISPLAY DISABLED 1=DISPLAY ENABLED\r
+| | ; BIT 6 0=TURNED OFF VIA TRANSIT SW 1=TURNED OFF VIA COMMAND\r
+| | ; BIT 7 USED TO CONTROL LED PULSING FOR TOUCHSCREEN EVERY 2ND CYCLE\r
+| | .DEF SCAN =R13\r
+| | .DEF API_STATE =R14\r
+| | \r
+| | .DEF W =R15\r
+| | .DEF F =R16 ; FG\r
+| | .DEF A =R17 ; FG\r
+| | .DEF B =R18 ; FG\r
+| | .DEF C =R20 ; INT\r
+| | .DEF D =R21 ; INT\r
+| | .DEF E =R25 ; INT\r
+| | ;.DEF ? =R19 ; INT\r
+| | \r
+| | .DEF XPIXEL =R22\r
+| | .DEF CURSORX =R23\r
+| | .DEF CURSORY =R24\r
+| | \r
+| | ; for AVRA / TAVRASM:\r
+| | ;.def XL =R26\r
+| | ;.def XH =R27\r
+| | ;.def YL =R28\r
+| | ;.def YH =R29\r
+| | ;.def ZL =R30\r
+| | ;.def ZH =R31\r
+| | \r
+| | .DSEG\r
+| | .ORG RAM\r
+| | \r
+| 000060 -DATA- | TX_BUF: .BYTE TX_SIZE\r
+| 000080 -DATA- | RX_BUF: .BYTE RX_SIZE\r
+| | \r
+| 000100 -DATA- | XBYTE_SAV: .BYTE 1 ; 063\r
+| 000101 -DATA- | X_SIZE_SAV: .BYTE 1 ; 066\r
+| 000102 -DATA- | XPIXEL_SAV: .BYTE 1 ; 067\r
+| 000103 -DATA- | PTR: .BYTE 3 ; 068\r
+| 000106 -DATA- | PORT_STATE: .BYTE 1 ; 0FA\r
+| 000107 -DATA- | ACTIVE_ZONE: .BYTE 1 ; 0FB\r
+| | \r
+| 000108 -DATA- | TMPL: .BYTE 1 ; 0FE\r
+| 000109 -DATA- | TMPH: .BYTE 1 ; 0FF\r
+| 00010A -DATA- | VCCL: .BYTE 1 ; 100\r
+| 00010B -DATA- | VCCH: .BYTE 1 ; 101\r
+| 00010C -DATA- | VEEL: .BYTE 1 ; 102\r
+| 00010D -DATA- | VEEH: .BYTE 1 ; 103\r
+| 00010E -DATA- | CONTRASTL: .BYTE 1 ; 104\r
+| 00010F -DATA- | CONTRASTH: .BYTE 1 ; 105\r
+| | \r
+| 000110 -DATA- | BUZZ_TIME: .BYTE 1 ; 10B\r
+| 000111 -DATA- | BUZZ_PERIOD: .BYTE 1\r
+| 000112 -DATA- | TEMP: .BYTE 1 ; 10C\r
+| | \r
+| 000113 -DATA- | DEBOUNCE: .BYTE 1\r
+| 000114 -DATA- | ROW_INDEX: .BYTE 1\r
+| 000115 -DATA- | ROW_BITMAP: .BYTE 2\r
+| 000117 -DATA- | LATCH10_SAV: .BYTE 1\r
+| 000118 -DATA- | LATCH11_SAV: .BYTE 1\r
+| 000119 -DATA- | LATCH12_SAV: .BYTE 1\r
+| 00011A -DATA- | XPAGE: .BYTE 1\r
+| 00011B -DATA- | ROWBUF: .BYTE 32 ; BUFFER FOR DSPRAM BLOCK READ/WRITE\r
+| | \r
+| 00013B -DATA- | LINE_COUNT: .BYTE 1 ; CURRENT POSITION TO TEST LINE_FLAGS\r
+| 00013C -DATA- | LINE_FLAGS: .BYTE 16 ; BUFFER 1 BIT PER LINE FOR COPY REQUIRED\r
+| | \r
+| 00014C -DATA- | CLOCKING_PTR: .BYTE 2\r
+| | \r
+| 00014E -DATA- | CHAR_X: .BYTE 1\r
+| 00014F -DATA- | CHAR_Y: .BYTE 1\r
+| 000150 -DATA- | CHAR_PTR: .BYTE 2\r
+| | \r
+| 000152 -DATA- | RECT_X: .BYTE 1\r
+| 000153 -DATA- | RECT_Y: .BYTE 1\r
+| 000154 -DATA- | RECT_XX: .BYTE 1\r
+| 000155 -DATA- | RECT_YY: .BYTE 1\r
+| | \r
+| 000156 -DATA- | RECTNC_X: .BYTE 1\r
+| 000157 -DATA- | RECTNC_Y: .BYTE 1\r
+| 000158 -DATA- | RECTNC_XX: .BYTE 1\r
+| 000159 -DATA- | RECTNC_YY: .BYTE 1\r
+| | \r
+| 00015A -DATA- | TOUCH_KEY: .BYTE 1\r
+| 00015B -DATA- | TOUCH_X: .BYTE 1\r
+| 00015C -DATA- | TOUCH_Y: .BYTE 1\r
+| 00015D -DATA- | TOUCH_XX: .BYTE 1\r
+| 00015E -DATA- | TOUCH_YY: .BYTE 1\r
+| | \r
+| 00015F -DATA- | TIME_HSEC_64K: .BYTE 1\r
+| 000160 -DATA- | TIME_HSEC_256: .BYTE 1\r
+| 000161 -DATA- | TIME_HSEC: .BYTE 1\r
+| 000162 -DATA- | TIME_SECOND: .BYTE 1\r
+| 000163 -DATA- | TIME_MINUTE: .BYTE 1\r
+| 000164 -DATA- | TIME_HOUR: .BYTE 1\r
+| 000165 -DATA- | DATE_DAY: .BYTE 1\r
+| 000166 -DATA- | DATE_MONTH: .BYTE 1\r
+| 000167 -DATA- | DATE_YEAR: .BYTE 1\r
+| | \r
+| 000168 -DATA- | SCAN_STATE: .BYTE 1\r
+| 000169 -DATA- | LATCH5_SAV: .BYTE 1\r
+| 00016A -DATA- | TURNON_COUNT: .BYTE 1\r
+| 00016B -DATA- | BREAK_COUNT: .BYTE 1\r
+| | \r
+| 00016C -DATA- | CURSORX_SAVE: .BYTE 1\r
+| 00016D -DATA- | CURSORY_SAVE: .BYTE 1\r
+| 00016E -DATA- | FLAGS_SAVE: .BYTE 1\r
+| 00016F -DATA- | PTR_SAVE: .BYTE 3\r
+| | \r
+| 000172 -DATA- | SCROLL_COUNT: .BYTE 1\r
+| 000173 -DATA- | SCROLL_X: .BYTE 1\r
+| 000174 -DATA- | SCROLL_Y: .BYTE 1\r
+| 000175 -DATA- | SCROLL_XX: .BYTE 1\r
+| 000176 -DATA- | SCROLL_YY: .BYTE 1\r
+| | \r
+| | .ESEG\r
+| | .ORG $000\r
+| | \r
+| 000000 00 EEPROM | .DB $00,$00 ; DON'T USE ADDR $000\r
+| 000001 00 EEPROM |\r
+| 000002 00 EEPROM | EE_CONTRAST: .DB $00,$00 ; RELY ON CONTRAST_INIT TO INITIALISE\r
+| 000003 00 EEPROM |\r
+| | \r
+| | .CSEG\r
+| | .ORG $0000\r
+| | \r
+| 000000 C00D | RJMP RESET_ENTRY\r
+| 000001 C606 | RJMP GO_EXT_INT0\r
+| 000002 C606 | RJMP GO_EXT_INT1\r
+| 000003 9518 | RETI ; TIM2_CMP\r
+| 000004 C605 | RJMP GO_TIM2_OVF ; TIM2_OVF\r
+| 000005 9518 | RETI ; TIM1_CAPT\r
+| 000006 9518 | RETI ; TIM1_COMPA\r
+| 000007 9518 | RETI ; TIM1_COMPB\r
+| 000008 C602 | RJMP GO_T1_OVERFLOW\r
+| 000009 C602 | RJMP GO_T0_OVERFLOW\r
+| 00000A 9518 | RETI ; SPI_STC\r
+| 00000B > INT_HANDLERS ; API BUS\r
+| 00000B C6ED > RJMP RX_COMPLETE ; UART RX COMPLETE HANDLER\r
+| 00000C C6D7 > RJMP TX_EMPTY ; UART DATA REGISTER EMPTY HANDLER\r
+| 00000D C72E > RJMP TX_COMPLETE ; UART TX COMPLETE HANDLER\r
+| | \r
+| | RESET_ENTRY:\r
+| 00000E E002 | LDI F,HIGH(RAMEND) ; INIT STACK POINTER\r
+| 00000F BF0E | OUT SPH,F\r
+| 000010 E50F | LDI F,LOW(RAMEND)\r
+| 000011 BF0D | OUT SPL,F\r
+| 000012 E810 | LDI A,$80\r
+| 000013 B918 | OUT ACSR,A ; POWER DOWN ANALOG COMPARATOR\r
+| | \r
+| 000014 95A8 | WDR ; RESET WATCHDOG\r
+| 000015 E01F | LDI A,$0F ; ENABLE WATCHDOG WITH 3 SEC TIMEOUT\r
+| 000016 BD11 | OUT WDTCR,A\r
+| | \r
+| 000017 E000 | LDI F,0\r
+| 000018 9300 015F | STS TIME_HSEC_64K,F\r
+| 00001A 9300 0160 | STS TIME_HSEC_256,F\r
+| 00001C 9300 0161 | STS TIME_HSEC,F\r
+| 00001E 9300 0162 | STS TIME_SECOND,F\r
+| 000020 9300 0163 | STS TIME_MINUTE,F\r
+| 000022 9300 0164 | STS TIME_HOUR,F\r
+| 000024 E001 | LDI F,1\r
+| 000025 9300 0165 | STS DATE_DAY,F\r
+| 000027 9300 0166 | STS DATE_MONTH,F\r
+| 000029 E104 | LDI F,20\r
+| 00002A 9300 0167 | STS DATE_YEAR,F\r
+| | \r
+| | RESTART_ENTRY:\r
+| | ;**:\r
+| 00002C E008 | LDI F,8 ; TIMER 2 CLOCKED BY 32 KHZ\r
+| | ;** LDI F,0 ; TIMER 2 CLOCKED BY 11 MHZ\r
+| 00002D BD02 | OUT ASSR,F\r
+| | ;**:\r
+| | ; MUST MATCH SET_TIME ROUTINE %\r
+| 00002E E003 | LDI F,3 ; TIMER 2 DIVIDE BY 32 (4 HZ)\r
+| | ;!! LDI F,$11 ; DIVIDE BY 2, TOGGLE OC2 (PIN 21)\r
+| | ; (RTC DIAGNOSTIC)\r
+| | ;** LDI F,6 ; TIMER 2 DIVIDE BY 256\r
+| 00002F BD05 | OUT TCCR2,F\r
+| | ; %\r
+| 000030 E400 | LDI F,$40\r
+| 000031 BF09 | OUT TIMSK,F ; TIMER 2 OVERFLOW INTERRUPTS ENABLED\r
+| 000032 E000 | LDI F,$00\r
+| 000033 BF0B | OUT GIMSK,F\r
+| | \r
+| 000034 EB08 | LDI F,$B8 ; INIT_PORTS\r
+| 000035 BB01 | OUT DDRD,F\r
+| 000036 BB02 | OUT PORTD,F ; D2 = TRI-STATE, VSWT ON\r
+| 000037 E10F | LDI F,$1F\r
+| 000038 BB07 | OUT DDRB,F\r
+| 000039 EF0F | LDI F,$FF\r
+| 00003A BB0A | OUT DDRA,F\r
+| 00003B BB04 | OUT DDRC,F\r
+| | \r
+| 00003C 2700 | CLR F\r
+| 00003D BB0B | OUT PORTA,F\r
+| | \r
+| 00003E E003 | LDI F,$03 ; CS, WE HI, LEs ALL LO\r
+| 00003F BB08 | OUT PORTB,F\r
+| | \r
+| 000040 E100 | LDI F,$10 ; LED COMMON OFF, SPEAKER OFF\r
+| 000041 BB05 | OUT PORTC,F\r
+| 000042 9AC2 | SBI PORTB,2\r
+| 000043 98C2 | CBI PORTB,2\r
+| 000044 9300 0119 | STS LATCH12_SAV,F\r
+| | \r
+| 000046 E200 | LDI F,$20\r
+| 000047 2EB0 | MOV FLAGS,F ; START WITH DISPLAY ENABLED\r
+| | \r
+| 000048 > INIT_API_BUS\r
+| 000048 E51F > LDI A,API_RATE_SLOW ; 4800 BPS\r
+| 000049 B919 > OUT UBRR,A ; SET UART RATE\r
+| > \r
+| 00004A E910 > LDI A,$90 ; ENABLE RX WITH INTERRUPTS\r
+| 00004B B91A > OUT UCR,A\r
+| > ;SBI UCR,TXEN ; TX ENABLE\r
+| > \r
+| 00004C 2444 > CLR TX_PTR\r
+| 00004D 2455 > CLR TX_COUNT\r
+| > \r
+| 00004E 2422 > CLR RX_PTR\r
+| 00004F 2433 > CLR RX_COUNT\r
+| > \r
+| 000050 24EE > CLR API_STATE\r
+| 000051 2466 > CLR API_REMAIN\r
+| 000052 24CC > CLR API_WATCHDOG\r
+| | \r
+| 000053 E158 | LDI D,$18 ; A18|A17|A16|A15|A14=11000\r
+| 000054 BB5B | OUT PORTA,D ; CL1=M=FLM=0\r
+| 000055 9AC4 | SBI PORTB,4\r
+| 000056 98C4 | CBI PORTB,4\r
+| 000057 9350 0117 | STS LATCH10_SAV,D\r
+| | \r
+| 000059 2755 | CLR D\r
+| 00005A 9350 0118 | STS LATCH11_SAV,D\r
+| 00005C 9350 013B | STS LINE_COUNT,D ; START UPDATE AT TOP OF SCREEN\r
+| 00005E 9350 016A | STS TURNON_COUNT,D ; REDUNDANTLY REQUEST TURNON\r
+| 000060 9350 016B | STS BREAK_COUNT,D ; SET LONGEST POSSIBLE BREAK TIMEOUT\r
+| 000062 9350 0110 | STS BUZZ_TIME,D ; NOT BUZZING (SHORT BEEP COMES LATER)\r
+| | \r
+| 000064 24DD | CLR SCAN\r
+| 000065 92D0 0114 | STS ROW_INDEX,SCAN\r
+| 000067 92D0 0115 | STS ROW_BITMAP,SCAN\r
+| 000069 92D0 0116 | STS ROW_BITMAP+1,SCAN\r
+| | \r
+| 00006B EF54 | LDI D,$F4 ; BIT 6 = 1 VDD ON, BIT 7 = 1 LCD ON\r
+| 00006C 9350 0169 | STS LATCH5_SAV,D\r
+| 00006E > PHOTO D\r
+| 00006E BB5B > OUT PORTA,D ; SELECT PHOTODIODE CHANNEL\r
+| 00006F 9150 0119 > LDS D,LATCH12_SAV\r
+| 000071 BB55 > OUT PORTC,D\r
+| 000072 9AA8 > SBI PORTC,0\r
+| 000073 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000074 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| 000075 98A8 > CBI PORTC,0\r
+| 000076 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000077 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| | \r
+| | ; NEED THIS FOR RTC\r
+| 000078 9478 | SEI ; ALLOW TIMER 2 INTERRUPTS ONLY\r
+| | \r
+| | ; INITIALISE ACTIVE KEYS\r
+| | RTNCDE: ;LDIZ RTN_CODE ; POINT Z TO FLASH\r
+| 000079 E0E2 | LDI ZL,LOW((RTN_CODE)*2) ; USE PRIOR TO LPM INSTRUCTION\r
+| 00007A E1F9 | LDI ZH,HIGH((RTN_CODE)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| | ;LDIX RTN_CODE_END-RTN_CODE ; BYTE COUNTER\r
+| 00007B EEA2 | LDI XL,LOW((RTN_CODE_END-RTN_CODE)*2) ; USE AS BYTE COUNTER\r
+| 00007C E0B0 | LDI XH,HIGH((RTN_CODE_END-RTN_CODE)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| 00007D > LDIYADR RTN_DSPRAM ; POINT Y TO DSPRAM & SET XPAGE\r
+| 00007D E1DB > LDI YH,HIGH(RTN_DSPRAM>>6)\r
+| 00007E 93D0 011A > STS XPAGE,YH\r
+| 000080 D108 > RCALL ADRYP ; AND SET XPAGE\r
+| 000081 E8D0 > LDI YH,HIGH(RTN_DSPRAM<<2)\r
+| 000082 ECC0 > LDI YL,(LOW(RTN_DSPRAM) & $3F) | (HIGH(RTN_DSPRAM) & $C0)\r
+| 000083 > CDE0: ADRH YH ; SET ADDRESS H FOR DSPRAM\r
+| 000083 BBDB > OUT PORTA,YH ; SET H ADDRESS FOR DSPRAM\r
+| 000084 9AC3 > SBI PORTB,3\r
+| 000085 98C3 > CBI PORTB,3\r
+| 000086 93D0 0118 > STS LATCH11_SAV,YH ; IS THIS NEEDED?\r
+| 000088 > CDE1: ADRL YL ; SET ADDRESS L FOR DSPRAM\r
+| 000088 BBC5 > OUT PORTC,YL ; SET L ADDRESS FOR DSPRAM\r
+| 000089 95C8 | LPM ; GET DATA FROM FLASH\r
+| 00008A 2400 | CLR R0 ; TEMPORARY CLEAR KB\r
+| 00008B > RAMWRX R0 ; WRITE DATA TO DSPRAM\r
+| 00008B BA0B > OUT PORTA,R0\r
+| 00008C 98C1 > CBI PORTB,1\r
+| 00008D 98C0 > CBI PORTB,0\r
+| 00008E 0000 > NOP\r
+| 00008F 9AC0 > SBI PORTB,0\r
+| 000090 9AC1 > SBI PORTB,1\r
+| 000091 95AA | DEC XL\r
+| 000092 F041 | BREQ RTNCDE_END ; CHECK IF ALL DONE\r
+| 000093 9631 | ADIW ZL,$01 ; INC FLASH ADDRESS\r
+| 000094 95C3 | INC YL ; INC ADDRESS L FOR DSPRAM\r
+| 000095 2F1C | MOV A,YL ;\r
+| 000096 731F | ANDI A,$3F ;YL,$3F\r
+| 000097 F781 | BRNE CDE1\r
+| 000098 54C0 | SUBI YL,$40 ;\r
+| 000099 95D3 | INC YH ; INC ADDRESS H (ON L ROLLOVER)\r
+| 00009A CFE8 | RJMP CDE0\r
+| | RTNCDE_END:\r
+| | \r
+| | ; INITIALISE DEFAULT CHARACTER SET\r
+| 00009B E310 | LDI A,'0'\r
+| 00009C D2D9 | RCALL CHARACTER_SET_FIND ; B:Y -> CHARACTER SET\r
+| 00009D 93CF | PUSH YL\r
+| 00009E 93DF | PUSH YH\r
+| 00009F D2E4 | RCALL CHARACTER_SET_CRC ; Y = CALCULATED CRC WORD\r
+| 0000A0 91BF | POP XH\r
+| 0000A1 91AF | POP XL\r
+| | \r
+| 0000A2 D55F | RCALL GO_READ_BYTE\r
+| 0000A3 2F21 | MOV B,A\r
+| 0000A4 2F1D | MOV A,YH\r
+| 0000A5 9512 | SWAP A\r
+| 0000A6 D333 | RCALL HEX_NIBBLE\r
+| 0000A7 1712 | CP A,B\r
+| 0000A8 F4B1 | BRNE CHARACTER_SET_INIT\r
+| 0000A9 9611 | ADIW XL,1\r
+| | \r
+| 0000AA D557 | RCALL GO_READ_BYTE\r
+| 0000AB 2F21 | MOV B,A\r
+| 0000AC 2F1D | MOV A,YH\r
+| 0000AD D32C | RCALL HEX_NIBBLE\r
+| 0000AE 1712 | CP A,B\r
+| 0000AF F479 | BRNE CHARACTER_SET_INIT\r
+| 0000B0 9611 | ADIW XL,1\r
+| | \r
+| 0000B1 D550 | RCALL GO_READ_BYTE\r
+| 0000B2 2F21 | MOV B,A\r
+| 0000B3 2F1C | MOV A,YL\r
+| 0000B4 9512 | SWAP A\r
+| 0000B5 D324 | RCALL HEX_NIBBLE\r
+| 0000B6 1712 | CP A,B\r
+| 0000B7 F439 | BRNE CHARACTER_SET_INIT\r
+| 0000B8 9611 | ADIW XL,1\r
+| | \r
+| 0000B9 D548 | RCALL GO_READ_BYTE\r
+| 0000BA 2F21 | MOV B,A\r
+| 0000BB 2F1C | MOV A,YL\r
+| 0000BC D31D | RCALL HEX_NIBBLE\r
+| 0000BD 1712 | CP A,B\r
+| 0000BE F109 | BREQ CHARACTER_SET_INIT_DONE\r
+| | \r
+| | CHARACTER_SET_INIT:\r
+| | ;LDIZ CHSET00 ; POINT Z TO FLASH\r
+| 0000BF EEE4 | LDI ZL,LOW((CHSET00)*2) ; USE PRIOR TO LPM INSTRUCTION\r
+| 0000C0 E1F9 | LDI ZH,HIGH((CHSET00)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| | ;LDIX CHSET00_END-CHSET00 ; BYTE COUNTER\r
+| 0000C1 E6A6 | LDI XL,LOW((CHSET00_END-CHSET00)*2) ; USE AS BYTE COUNTER\r
+| 0000C2 E0B3 | LDI XH,HIGH((CHSET00_END-CHSET00)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| 0000C3 > LDIYADR CHSET_DSPRAM ; POINT Y TO DSPRAM & SET XPAGE\r
+| 0000C3 E1D9 > LDI YH,HIGH(CHSET_DSPRAM>>6)\r
+| 0000C4 93D0 011A > STS XPAGE,YH\r
+| 0000C6 D0C2 > RCALL ADRYP ; AND SET XPAGE\r
+| 0000C7 E0D0 > LDI YH,HIGH(CHSET_DSPRAM<<2)\r
+| 0000C8 E4C0 > LDI YL,(LOW(CHSET_DSPRAM) & $3F) | (HIGH(CHSET_DSPRAM) & $C0)\r
+| 0000C9 > CHST0: ADRH YH ; SET ADDRESS H FOR DSPRAM\r
+| 0000C9 BBDB > OUT PORTA,YH ; SET H ADDRESS FOR DSPRAM\r
+| 0000CA 9AC3 > SBI PORTB,3\r
+| 0000CB 98C3 > CBI PORTB,3\r
+| 0000CC 93D0 0118 > STS LATCH11_SAV,YH ; IS THIS NEEDED?\r
+| 0000CE > CHST1: ADRL YL ; SET ADDRESS L FOR DSPRAM\r
+| 0000CE BBC5 > OUT PORTC,YL ; SET L ADDRESS FOR DSPRAM\r
+| 0000CF 95C8 | LPM ; GET DATA FROM FLASH\r
+| 0000D0 > RAMWRX R0 ; WRITE DATA TO DSPRAM\r
+| 0000D0 BA0B > OUT PORTA,R0\r
+| 0000D1 98C1 > CBI PORTB,1\r
+| 0000D2 98C0 > CBI PORTB,0\r
+| 0000D3 0000 > NOP\r
+| 0000D4 9AC0 > SBI PORTB,0\r
+| 0000D5 9AC1 > SBI PORTB,1\r
+| 0000D6 9711 | SBIW XL,1\r
+| 0000D7 F041 | BREQ CHARACTER_SET_INIT_DONE ; CHECK IF ALL DONE\r
+| 0000D8 9631 | ADIW ZL,$01 ; INC FLASH ADDRESS\r
+| 0000D9 95C3 | INC YL ; INC ADDRESS L FOR DSPRAM\r
+| 0000DA 2F1C | MOV A,YL ;\r
+| 0000DB 731F | ANDI A,$3F ;YL,$3F\r
+| 0000DC F789 | BRNE CHST1\r
+| 0000DD 54C0 | SUBI YL,$40 ;\r
+| 0000DE 95D3 | INC YH ; INC ADDRESS H (ON L ROLLOVER)\r
+| 0000DF CFE9 | RJMP CHST0\r
+| | \r
+| | CHARACTER_SET_INIT_DONE:\r
+| 0000E0 E120 | LDI B,LOW(CHSET_DSPRAM+$10) ; SET POINTER TO HEADER\r
+| 0000E1 9320 0103 | STS PTR,B\r
+| 0000E3 E420 | LDI B,HIGH(CHSET_DSPRAM+$10) ;<<2\r
+| 0000E4 9320 0104 | STS PTR+1,B\r
+| 0000E6 E129 | LDI B,HIGH((CHSET_DSPRAM+$10)>>6)\r
+| 0000E7 9320 0105 | STS PTR+2,B\r
+| | \r
+| | ; CLEAR REFRESH BUFFER TO AVOID A BRIEF FLICKER\r
+| 0000E9 E0C0 | LDI YL,LOW(DRAW_DSPRAM)\r
+| 0000EA E2D0 | LDI YH,HIGH(DRAW_DSPRAM)\r
+| 0000EB E118 | LDI A,HIGH(DRAW_DSPRAM>>6)\r
+| 0000EC D518 | RCALL GO_SELECT_XPAGE\r
+| | \r
+| 0000ED E820 | LDI B,DISPLAY_LINES ; B = LINES TO CLEAR\r
+| | \r
+| | CLEAR_REFRESH:\r
+| 0000EE 932F | PUSH B\r
+| 0000EF 93CF | PUSH YL\r
+| 0000F0 93DF | PUSH YH\r
+| | \r
+| 0000F1 E220 | LDI B,32\r
+| 0000F2 D511 | RCALL GO_CLEAR_BYTES ; 240 PIXELS, PLUS 16 FOR SAMSUNG\r
+| | \r
+| 0000F3 9626 | ADIW YL,6\r
+| 0000F4 E022 | LDI B,2\r
+| 0000F5 D50E | RCALL GO_CLEAR_BYTES ; REPEAT FINAL 16 PIXELS FOR HYUNDAI\r
+| | \r
+| 0000F6 91DF | POP YH\r
+| 0000F7 91CF | POP YL\r
+| 0000F8 912F | POP B\r
+| 0000F9 5CC0 | SUBI YL,LOW(-$40)\r
+| 0000FA 4FDF | SBCI YH,HIGH(-$40)\r
+| | \r
+| 0000FB 952A | DEC B\r
+| 0000FC F789 | BRNE CLEAR_REFRESH\r
+| | \r
+| 0000FD D6B4 | RCALL CLEAR_DISPLAY ; CLEARS DISPLAY AND HOMES CURSOR\r
+| | \r
+| 0000FE E010 | LDI A,0\r
+| 0000FF 9310 0111 | STS BUZZ_PERIOD,A ; HIGHEST FREQUENCY\r
+| 000101 E316 | LDI A,54 ;$40\r
+| 000102 9310 0110 | STS BUZZ_TIME,A ; SHORT BEEP ON STARTUP\r
+| | \r
+| 000104 E010 | LDI A,0\r
+| 000105 9310 0168 | STS SCAN_STATE,A ; START ON FIRST LED / PHOTODIODE PAIR\r
+| | \r
+| 000107 E010 | LDI A,0\r
+| 000108 9310 014C | STS CLOCKING_PTR,A\r
+| 00010A 9310 014D | STS CLOCKING_PTR+1,A ; INITIALISE CURRENT LINE FOR CLOCKING\r
+| | \r
+| 00010C EF1E | LDI A,HIGH(VEE_INIT)\r
+| 00010D 9310 010D | STS VEEH,A\r
+| 00010F EA1C | LDI A,LOW(VEE_INIT)\r
+| 000110 9310 010C | STS VEEL,A ; INIT MEASURED VEE\r
+| | \r
+| 000112 E022 | LDI B,EE_CONTRAST ; 20mar03 tavrasm *2\r
+| 000113 D220 | RCALL EE_READ\r
+| 000114 7F1C | ANDI A,~(CONTRAST_STEP-1)\r
+| 000115 9310 010E | STS CONTRASTL,A\r
+| 000117 E023 | LDI B,EE_CONTRAST+1 ; 20mar03 tavrasm *2+1\r
+| 000118 D21B | RCALL EE_READ\r
+| 000119 9310 010F | STS CONTRASTH,A\r
+| | \r
+| 00011B 9110 010E | LDS A,CONTRASTL\r
+| 00011D 9120 010F | LDS B,CONTRASTH\r
+| | \r
+| 00011F 331A | CPI A,LOW(CONTRAST_MIN)\r
+| 000120 EF0D | LDI F,HIGH(CONTRAST_MIN)\r
+| 000121 0720 | CPC B,F\r
+| 000122 F020 | BRLO CONTRAST_RESET\r
+| | \r
+| 000123 3B1C | CPI A,LOW(CONTRAST_MAX)\r
+| 000124 EF0D | LDI F,HIGH(CONTRAST_MAX)\r
+| 000125 0720 | CPC B,F\r
+| 000126 F030 | BRLO CONTRAST_PRESERVE\r
+| | \r
+| | CONTRAST_RESET:\r
+| 000127 EF1D | LDI A,HIGH(CONTRAST_INIT)\r
+| 000128 9310 010F | STS CONTRASTH,A\r
+| 00012A E810 | LDI A,LOW(CONTRAST_INIT)\r
+| 00012B 9310 010E | STS CONTRASTL,A ; INIT REQUESTED CONTRAST\r
+| | \r
+| | CONTRAST_PRESERVE:\r
+| 00012D EF1F | LDI A,HIGH(CONTRAST_MID)\r
+| 00012E BD19 | OUT OCR1BH,A\r
+| 00012F E318 | LDI A,LOW(CONTRAST_MID)\r
+| 000130 BD18 | OUT OCR1BL,A ; INIT GENERATOR PULSE WIDTH\r
+| | \r
+| 000131 EF1C | LDI A,HIGH(T1_INIT)\r
+| 000132 BD1D | OUT TCNT1H,A\r
+| 000133 EC1E | LDI A,LOW(T1_INIT)\r
+| 000134 BD1C | OUT TCNT1L,A\r
+| | \r
+| 000135 E510 | LDI A,$50\r
+| 000136 BD1F | OUT TCCR1A,A ; TIMER 1 TOGGLE ON COMPARE MATCH\r
+| 000137 E011 | LDI A,$01\r
+| 000138 BD1E | OUT TCCR1B,A ; TIMER 1 RUNNING\r
+| | \r
+| 000139 E000 | LDI F,$00\r
+| 00013A BF03 | OUT TCCR0,F ; TIMER 0 NOT RUNNING YET\r
+| | \r
+| 00013B E005 | LDI F,$05\r
+| 00013C BF08 | OUT TIFR,F ; RESET TIMER 0, 1 INTERRUPT FLAGS\r
+| 00013D E405 | LDI F,$45\r
+| 00013E BF09 | OUT TIMSK,F ; TURN ON TIMER 0, 1, 2 INTERRUPTS\r
+| | \r
+| 00013F E00A | LDI F,$0A\r
+| 000140 BF05 | OUT MCUCR,F ; SET EXTERNAL INTERRUPT 0, 1 SENSE\r
+| 000141 EC00 | LDI F,$C0\r
+| 000142 BF0A | OUT GIFR,F ; RESET EXTERNAL INTERRUPT 0, 1 FLAGS\r
+| 000143 BF0B | OUT GIMSK,F ; TURN ON EXTERNAL INTERRUPT 0, 1\r
+| | \r
+| | ;RCALL HELLO_DISPLAY ; SHOW EXAMPLE DISPLAY\r
+| | \r
+| | ;RCALL CLEAR_DISPLAY ; CLEARS DISPLAY AND HOMES CURSOR\r
+| 000144 C29E | RJMP SAVE_ENTRY ; IN CASE STATE INADVERTENTLY RESTORED\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | SLEEP_ENTRY:\r
+| 000145 E002 | LDI F,HIGH(RAMEND) ; INIT STACK POINTER\r
+| 000146 BF0E | OUT SPH,F\r
+| 000147 E50F | LDI F,LOW(RAMEND)\r
+| 000148 BF0D | OUT SPL,F\r
+| | \r
+| 000149 E050 | LDI D,$00\r
+| 00014A BD5F | OUT TCCR1A,D ; DISCONNECT PWM FROM OC1A, OC1B\r
+| | ;SBRS FLAGS,6 ; IF WE TURNED OFF VIA BREAK DETECT,\r
+| 00014B BD5E | OUT TCCR1B,D ; STOP TIMER 1 ALTOGETHER\r
+| | \r
+| 00014C 9A94 | SBI PORTD,4 ; TURN TRANSISTOR OFF\r
+| 00014D 9895 | CBI PORTD,5 ; DROP CL2\r
+| | \r
+| 00014E 9150 0117 | LDS D,LATCH10_SAV\r
+| 000150 7B5F | ANDI D,$BF ; DROP M\r
+| 000151 BB5B | OUT PORTA,D\r
+| 000152 9AC4 | SBI PORTB,4\r
+| 000153 98C4 | CBI PORTB,4\r
+| 000154 9350 0117 | STS LATCH10_SAV,D\r
+| | \r
+| 000156 E754 | LDI D,$74 ; BIT 6 = 1 VDD ON, BIT 7 = 0 LCD OFF\r
+| 000157 FEB6 | SBRS FLAGS,6 ; IF WE TURNED OFF VIA BREAK DETECT,\r
+| 000158 E354 | LDI D,$34 ; BIT 6 = 0 VDD OFF, BIT 7 = 0 LCD OFF\r
+| 000159 9350 0169 | STS LATCH5_SAV,D\r
+| 00015B > PHOTO D\r
+| 00015B BB5B > OUT PORTA,D ; SELECT PHOTODIODE CHANNEL\r
+| 00015C 9150 0119 > LDS D,LATCH12_SAV\r
+| 00015E BB55 > OUT PORTC,D\r
+| 00015F 9AA8 > SBI PORTC,0\r
+| 000160 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000161 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| 000162 98A8 > CBI PORTC,0\r
+| 000163 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000164 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| | \r
+| 000165 E451 | LDI D,$41\r
+| 000166 BF59 | OUT TIMSK,D ; DISABLE TIMER 1 INTERRUPTS\r
+| | \r
+| 000167 E050 | LDI D,0\r
+| 000168 BF53 | OUT TCCR0,D ; DISABLE TIMER 0 TEMPORARILY ONLY\r
+| 000169 BF5B | OUT GIMSK,D ; DISABLE THERMISTOR INTERRUPTS\r
+| | \r
+| 00016A E004 | LDI F,4\r
+| 00016B 9300 016A | STS TURNON_COUNT,F ; .25 SEC TO BREAK, .75 SEC TO MAKE\r
+| | \r
+| 00016D > INIT_API_BUS ; RESET UART TO RECEIVE TURNON COMMAND\r
+| 00016D E51F > LDI A,API_RATE_SLOW ; 4800 BPS\r
+| 00016E B919 > OUT UBRR,A ; SET UART RATE\r
+| > \r
+| 00016F E910 > LDI A,$90 ; ENABLE RX WITH INTERRUPTS\r
+| 000170 B91A > OUT UCR,A\r
+| > ;SBI UCR,TXEN ; TX ENABLE\r
+| > \r
+| 000171 2444 > CLR TX_PTR\r
+| 000172 2455 > CLR TX_COUNT\r
+| > \r
+| 000173 2422 > CLR RX_PTR\r
+| 000174 2433 > CLR RX_COUNT\r
+| > \r
+| 000175 24EE > CLR API_STATE\r
+| 000176 2466 > CLR API_REMAIN\r
+| 000177 24CC > CLR API_WATCHDOG\r
+| | \r
+| | SLEEP_LOOP:\r
+| 000178 94F8 | CLI\r
+| 000179 B703 | IN F,TCCR0\r
+| 00017A 2300 | TST F\r
+| 00017B E40A | LDI F,$4A ; SE=1 SM1:SM0=00 FOR IDLE MODE\r
+| 00017C F411 | BRNE SLEEP_SETUP ; TIMER 0 RUNNING, STAY IN IDLE MODE\r
+| 00017D 9B80 | SBIS PIND,0 ; BREAK OFF, UART ACTIVE, STAY IN IDLE\r
+| 00017E E70A | LDI F,$7A ; SE=1 SM1:SM0=11 FOR POWER SAVE MODE\r
+| | SLEEP_SETUP:\r
+| 00017F BF05 | OUT MCUCR,F\r
+| 000180 9478 | SEI\r
+| 000181 9588 | SLEEP\r
+| | \r
+| | ; FORMERLY DONE IN TIMER 2 OVERFLOW INTERRUPT\r
+| 000182 95A8 | WDR\r
+| | \r
+| 000183 9100 016A | LDS F,TURNON_COUNT\r
+| 000185 2300 | TST F ; HAD TOUCHSCREEN ACTIVITY FOR TIMEOUT?\r
+| | ;SBRS FLAGS,6 ; IF WE TURNED OFF VIA BREAK DETECT,\r
+| | ;SBIS PIND,0 ; AND BREAK HAS DISAPPEARED, WAKE UP\r
+| 000186 F789 | BRNE SLEEP_LOOP ; NO, GO BACK TO SLEEP\r
+| | \r
+| 000187 94F8 | CLI\r
+| 000188 CEA3 | RJMP RESTART_ENTRY ; GO AND CLEAR DISPLAY ETC\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| 000189 91D0 011A | ADRYP: LDS YH,XPAGE ; SET XPAGE ADDRESS FOR DSPRAM\r
+| 00018B 91C0 0117 | LDS YL,LATCH10_SAV\r
+| 00018D 7EC0 | ANDI YL,$E0\r
+| 00018E 2BDC | OR YH,YL\r
+| 00018F BBDB | OUT PORTA,YH\r
+| 000190 9AC4 | SBI PORTB,4\r
+| 000191 98C4 | CBI PORTB,4\r
+| 000192 93D0 0117 | STS LATCH10_SAV,YH\r
+| 000194 9508 | RET\r
+| | \r
+| | ;INCADRY:\r
+| | ; CLR YL\r
+| | ; INC YH\r
+| | ; BRNE INCRET\r
+| | ; LDS YH,XPAGE\r
+| | ; INC YH\r
+| | ; ANDI YH,$1F\r
+| | ; STS XPAGE,YH\r
+| | ; CLR YH\r
+| | ;INCRET: RET\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | ;HELLO_DISPLAY:\r
+| | ; LDI A,0\r
+| | ; STS RECTNC_X,A\r
+| | ; STS RECTNC_Y,A\r
+| | ; STS RECTNC_XX,A\r
+| | ; LDI A,$80\r
+| | ; STS RECTNC_YY,A\r
+| | ; RCALL DRAW_RECTNC\r
+| | ;\r
+| | ; LDI A,16\r
+| | ; STS CHAR_X,A\r
+| | ; STS CHAR_Y,A\r
+| | ; LDI B,5\r
+| | ; LDI ZL,LOW(HELLO_MESSAGE*2)\r
+| | ; LDI ZH,HIGH(HELLO_MESSAGE*2)\r
+| | ; RCALL STRING_DRAW\r
+| | ;\r
+| | ; LDI A,240\r
+| | ; STS CHAR_X,A\r
+| | ; LDI B,5\r
+| | ; LDI ZL,LOW(HELLO_MESSAGE*2)\r
+| | ; LDI ZH,HIGH(HELLO_MESSAGE*2)\r
+| | ;\r
+| | ;STRING_RIGHT_JUST:\r
+| | ; PUSH B\r
+| | ; PUSH ZL\r
+| | ; PUSH ZH\r
+| | ; RCALL STRING_WIDTH\r
+| | ; POP ZH\r
+| | ; POP ZL\r
+| | ; POP B\r
+| | ; LDS A,CHAR_X\r
+| | ; SUB A,R0\r
+| | ; STS CHAR_X,A\r
+| | ;\r
+| | ;STRING_DRAW:\r
+| | ; PUSH B\r
+| | ; LPM\r
+| | ; MOV A,R0\r
+| | ; ADIW ZL,1\r
+| | ; PUSH ZL\r
+| | ; PUSH ZH\r
+| | ; RCALL FIND_CHAR\r
+| | ; RCALL CHAR_WIDTH\r
+| | ; PUSH R0\r
+| | ; RCALL DRAW_CHAR\r
+| | ; POP R0\r
+| | ; POP ZH\r
+| | ; POP ZL\r
+| | ; LDS A,CHAR_X\r
+| | ; ADD A,R0\r
+| | ; STS CHAR_X,A\r
+| | ; POP B\r
+| | ; DEC B\r
+| | ; BRNE STRING_DRAW\r
+| | ; RET\r
+| | ;\r
+| | ;STRING_WIDTH:\r
+| | ; CLR R0\r
+| | ;STRING_WIDTH_LOOP:\r
+| | ; PUSH B\r
+| | ; PUSH R0\r
+| | ; LPM\r
+| | ; MOV A,R0\r
+| | ; ADIW ZL,1\r
+| | ; PUSH ZL\r
+| | ; PUSH ZH\r
+| | ; RCALL FIND_CHAR\r
+| | ; RCALL CHAR_WIDTH\r
+| | ; POP ZH\r
+| | ; POP ZL\r
+| | ; POP A\r
+| | ; ADD R0,A\r
+| | ; POP B\r
+| | ; DEC B\r
+| | ; BRNE STRING_WIDTH_LOOP\r
+| | ; RET\r
+| | ;\r
+| | ;HELLO_MESSAGE: .DB 'H','E','L','L','O',0\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | MAIN_LOOP:\r
+| 000195 9478 | SEI ; SHOULD BE BEFORE MAIN_LOOP\r
+| | \r
+| 000196 ED1F | LDI A,~(1<<EEWR_ENABLE)\r
+| 000197 22E1 | AND API_STATE,A ; DISABLE WRITE ACCESS TO EEPROM\r
+| | \r
+| 000198 E010 | LDI A,0\r
+| 000199 BB1E | OUT EEARL,A ; RESET EEPROM ADDRESS REG WHILE IDLE\r
+| 00019A BB1F | OUT EEARH,A\r
+| | \r
+| 00019B D2E2 | RCALL RX_WAIT\r
+| | \r
+| 00019C 311B | CPI A,$1B\r
+| 00019D F159 | BREQ ESC_SEQUENCE\r
+| | \r
+| 00019E FCB3 | SBRC FLAGS,3\r
+| 00019F C00D | RJMP REGULAR_CHAR\r
+| 0001A0 3210 | CPI A,$20\r
+| 0001A1 F458 | BRSH REGULAR_CHAR\r
+| | \r
+| 0001A2 3018 | CPI A,$08\r
+| 0001A3 > RJEQ BACK_SPACE\r
+| 0001A3 F409 > BRNE LOCAL\r
+| 0001A4 C107 > RJMP BACK_SPACE\r
+| > LOCAL:\r
+| | ;L0132:\r
+| 0001A5 301D | CPI A,$0D\r
+| 0001A6 > RJEQ CR\r
+| 0001A6 F409 > BRNE LOCAL\r
+| 0001A7 C11C > RJMP CR\r
+| > LOCAL:\r
+| | ;L0135:\r
+| 0001A8 301A | CPI A,$0A\r
+| 0001A9 F409 | BRNE TEST_BELL\r
+| 0001AA C0C0 | RJMP LF\r
+| | TEST_BELL:\r
+| 0001AB 3017 | CPI A,7\r
+| 0001AC F741 | BRNE MAIN_LOOP\r
+| | \r
+| | REGULAR_CHAR:\r
+| 0001AD FCB2 | SBRC FLAGS,2 ; CROSSED ZEROS ON?\r
+| 0001AE C018 | RJMP L013B ; YES, DON'T BOTHER TESTING FOR ZERO\r
+| 0001AF 3310 | CPI A,'0'\r
+| 0001B0 F4B1 | BRNE L013B\r
+| 0001B1 91C0 0103 | LDS YL,PTR\r
+| 0001B3 91D0 0104 | LDS YH,PTR+1\r
+| 0001B5 9120 0105 | LDS B,PTR+2\r
+| 0001B7 5FCC | SUBI YL,LOW(-$204)\r
+| 0001B8 4FDD | SBCI YH,HIGH(-$204)\r
+| 0001B9 > A14_A18 B\r
+| 0001B9 94F8 > CLI\r
+| 0001BA 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 0001BC 2732 > EOR R19,B\r
+| 0001BD 7E30 > ANDI R19,$E0\r
+| 0001BE 2732 > EOR R19,B\r
+| 0001BF BB3B > OUT PORTA,R19\r
+| 0001C0 9AC4 > SBI PORTB,4\r
+| 0001C1 98C4 > CBI PORTB,4\r
+| 0001C2 9478 > SEI\r
+| 0001C3 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| 0001C5 D593 | RCALL LPMS\r
+| 0001C6 2D10 | MOV A,R0\r
+| 0001C7 D2EC | L013B: RCALL DRAW_CHAR_TTY\r
+| 0001C8 CFCC | RJMP MAIN_LOOP\r
+| | \r
+| | ESC_SEQUENCE:\r
+| 0001C9 D2B4 | RCALL RX_WAIT\r
+| 0001CA 311B | CPI A,$1B\r
+| 0001CB F309 | BREQ REGULAR_CHAR\r
+| 0001CC 321E | CPI A,'.'\r
+| 0001CD > RJEQ CHARACTER_SET_DOWNLOAD\r
+| 0001CD F409 > BRNE LOCAL\r
+| 0001CE C17C > RJMP CHARACTER_SET_DOWNLOAD\r
+| > LOCAL:\r
+| 0001CF 321F | CPI A,'/'\r
+| 0001D0 > RJEQ CROSSED_ZEROS\r
+| 0001D0 F409 > BRNE LOCAL\r
+| 0001D1 C052 > RJMP CROSSED_ZEROS\r
+| > LOCAL:\r
+| 0001D2 331F | CPI A,'?'\r
+| 0001D3 > RJEQ CHARACTER_SET_QUERY\r
+| 0001D3 F409 > BRNE LOCAL\r
+| 0001D4 C191 > RJMP CHARACTER_SET_QUERY\r
+| > LOCAL:\r
+| 0001D5 3412 | CPI A,'B'\r
+| 0001D6 > RJEQ BUZZER\r
+| 0001D6 F409 > BRNE LOCAL\r
+| 0001D7 C05E > RJMP BUZZER\r
+| > LOCAL:\r
+| 0001D8 3612 | CPI A,'b'\r
+| 0001D9 > RJEQ BUZZ_AT_FREQ\r
+| 0001D9 F409 > BRNE LOCAL\r
+| 0001DA C05F > RJMP BUZZ_AT_FREQ\r
+| > LOCAL:\r
+| 0001DB 3413 | CPI A,'C'\r
+| 0001DC > RJEQ CLEAR_RECTANGLE\r
+| 0001DC F409 > BRNE LOCAL\r
+| 0001DD C10B > RJMP CLEAR_RECTANGLE\r
+| > LOCAL:\r
+| 0001DE 3613 | CPI A,'c'\r
+| 0001DF > RJEQ GET_CLEAR_FRAME_RECT_SIZE\r
+| 0001DF F409 > BRNE LOCAL\r
+| 0001E0 CCC4 > RJMP GET_CLEAR_FRAME_RECT_SIZE\r
+| > LOCAL:\r
+| 0001E1 3414 | CPI A,'D'\r
+| 0001E2 > RJEQ DRAW_MODE\r
+| 0001E2 F409 > BRNE LOCAL\r
+| 0001E3 C0F2 > RJMP DRAW_MODE\r
+| > LOCAL:\r
+| 0001E4 3415 | CPI A,'E'\r
+| 0001E5 > RJEQ ENABLE_CNTRL\r
+| 0001E5 F409 > BRNE LOCAL\r
+| 0001E6 C0DF > RJMP ENABLE_CNTRL\r
+| > LOCAL:\r
+| 0001E7 3416 | CPI A,'F'\r
+| 0001E8 > RJEQ GET_FILLED_RECTNC_SIZE\r
+| 0001E8 F409 > BRNE LOCAL\r
+| 0001E9 C10F > RJMP GET_FILLED_RECTNC_SIZE\r
+| > LOCAL:\r
+| 0001EA 3616 | CPI A,'f'\r
+| 0001EB > RJEQ GET_FRAME_RECT_SIZE\r
+| 0001EB F409 > BRNE LOCAL\r
+| 0001EC CCC4 > RJMP GET_FRAME_RECT_SIZE\r
+| > LOCAL:\r
+| 0001ED 3417 | CPI A,'G'\r
+| 0001EE > RJEQ INTERPRET_MODE\r
+| 0001EE F409 > BRNE LOCAL\r
+| 0001EF C0A1 > RJMP INTERPRET_MODE\r
+| > LOCAL:\r
+| 0001F0 3418 | CPI A,'H'\r
+| 0001F1 > RJEQ GET_HALFTONE_RECT_SIZE\r
+| 0001F1 F409 > BRNE LOCAL\r
+| 0001F2 CCD6 > RJMP GET_HALFTONE_RECT_SIZE\r
+| > LOCAL:\r
+| 0001F3 3618 | CPI A,'h'\r
+| 0001F4 > RJEQ GET_CLEAR_HALFTONE_RECT_SIZE\r
+| 0001F4 F409 > BRNE LOCAL\r
+| 0001F5 CCC7 > RJMP GET_CLEAR_HALFTONE_RECT_SIZE\r
+| > LOCAL:\r
+| 0001F6 341B | CPI A,'K'\r
+| 0001F7 > RJEQ CLR_DISP\r
+| 0001F7 F409 > BRNE LOCAL\r
+| 0001F8 C096 > RJMP CLR_DISP\r
+| > LOCAL:\r
+| 0001F9 341C | CPI A,'L'\r
+| 0001FA > RJEQ GO_SCROLL_REGION\r
+| 0001FA F409 > BRNE LOCAL\r
+| 0001FB C40A > RJMP GO_SCROLL_REGION\r
+| > LOCAL:\r
+| 0001FC 341D | CPI A,'M'\r
+| 0001FD > RJEQ MOSFET_CONTROL\r
+| 0001FD F409 > BRNE LOCAL\r
+| 0001FE C02E > RJMP MOSFET_CONTROL\r
+| > LOCAL:\r
+| 0001FF 341E | CPI A,'N'\r
+| 000200 > RJEQ GET_RECTNC_SIZE\r
+| 000200 F409 > BRNE LOCAL\r
+| 000201 C103 > RJMP GET_RECTNC_SIZE\r
+| > LOCAL:\r
+| 000202 3510 | CPI A,'P'\r
+| 000203 > RJEQ PROP_FIXED_MODE\r
+| 000203 F409 > BRNE LOCAL\r
+| 000204 C09A > RJMP PROP_FIXED_MODE\r
+| > LOCAL:\r
+| 000205 3512 | CPI A,'R'\r
+| 000206 > RJEQ GET_RECT_SIZE\r
+| 000206 F409 > BRNE LOCAL\r
+| 000207 C0E3 > RJMP GET_RECT_SIZE\r
+| > LOCAL:\r
+| 000208 3513 | CPI A,'S'\r
+| 000209 > RJEQ SET_CURSOR\r
+| 000209 F409 > BRNE LOCAL\r
+| 00020A C0D9 > RJMP SET_CURSOR\r
+| > LOCAL:\r
+| 00020B 3514 | CPI A,'T'\r
+| 00020C > RJEQ SET_TIME\r
+| 00020C F409 > BRNE LOCAL\r
+| 00020D C040 > RJMP SET_TIME\r
+| > LOCAL:\r
+| 00020E 3515 | CPI A,'U'\r
+| 00020F > RJEQ NULLSUB\r
+| 00020F F409 > BRNE LOCAL\r
+| 000210 C26B > RJMP NULLSUB\r
+| > LOCAL:\r
+| 000211 3516 | CPI A,'V'\r
+| 000212 F419 | BRNE CONTRAST_CONTROL_SKIP\r
+| 000213 E210 | LDI A,1<<EEWR_ENABLE\r
+| 000214 2AE1 | OR API_STATE,A ; ENABLE WRITE ACCESS TO EEPROM\r
+| 000215 C0FB | RJMP CONTRAST_CONTROL\r
+| | CONTRAST_CONTROL_SKIP:\r
+| 000216 3517 | CPI A,'W'\r
+| 000217 > RJEQ NULLSUB\r
+| 000217 F409 > BRNE LOCAL\r
+| 000218 C263 > RJMP NULLSUB\r
+| > LOCAL:\r
+| 000219 3518 | CPI A,'X'\r
+| 00021A > RJEQ SAVE_STATE\r
+| 00021A F409 > BRNE LOCAL\r
+| 00021B C1C4 > RJMP SAVE_STATE\r
+| > LOCAL:\r
+| 00021C 351A | CPI A,'Z'\r
+| 00021D > RJEQ TOUCH_ZONE\r
+| 00021D F409 > BRNE LOCAL\r
+| 00021E C1EE > RJMP TOUCH_ZONE\r
+| > LOCAL:\r
+| 00021F 3310 | CPI A,'0'\r
+| 000220 F010 | BRLO ESC_SEQUENCE_ABORT\r
+| 000221 331A | CPI A,'9'+1\r
+| 000222 F110 | BRLO SET_CHSET_A\r
+| | ESC_SEQUENCE_ABORT:\r
+| 000223 CF71 | RJMP MAIN_LOOP\r
+| | \r
+| | CROSSED_ZEROS:\r
+| 000224 D259 | RCALL RX_WAIT\r
+| 000225 FF10 | SBRS A,0\r
+| 000226 C003 | RJMP CROSSED_ZEROS_OFF\r
+| 000227 E014 | LDI A,1<<2\r
+| 000228 2AB1 | OR FLAGS,A\r
+| 000229 CF6B | RJMP MAIN_LOOP\r
+| | CROSSED_ZEROS_OFF:\r
+| 00022A EF1B | LDI A,~(1<<2)\r
+| 00022B 22B1 | AND FLAGS,A\r
+| 00022C CF68 | RJMP MAIN_LOOP\r
+| | \r
+| | MOSFET_CONTROL:\r
+| 00022D D250 | RCALL RX_WAIT\r
+| 00022E 3310 | CPI A,$30 ; DO NOT TURN OFF BY ACCIDENT\r
+| 00022F F429 | BRNE MOSFET_CONTROL_DONE\r
+| 000230 94F8 | CLI\r
+| 000231 E400 | LDI F,1<<6\r
+| 000232 2AB0 | OR FLAGS,F ; SAY WE TURNED OFF VIA COMMAND\r
+| 000233 9A8A | SBI DDRD,2 ; D2 = LOW, VSWT OFF\r
+| 000234 CF10 | RJMP SLEEP_ENTRY ; GO AND SHUT DOWN DISPLAY\r
+| | MOSFET_CONTROL_DONE:\r
+| 000235 CF5F | RJMP MAIN_LOOP\r
+| | \r
+| 000236 D247 | BUZZER: RCALL RX_WAIT\r
+| 000237 931F | PUSH A\r
+| 000238 E010 | LDI A,0 ; HIGHEST FREQUENCY\r
+| 000239 C004 | RJMP BUZZ_AT_FREQ_A\r
+| | \r
+| | BUZZ_AT_FREQ:\r
+| 00023A D243 | RCALL RX_WAIT\r
+| 00023B 931F | PUSH A\r
+| 00023C D241 | RCALL RX_WAIT\r
+| 00023D 701F | ANDI A,$0F\r
+| | BUZZ_AT_FREQ_A:\r
+| 00023E 9310 0111 | STS BUZZ_PERIOD,A ; SAVE REQUESTED PERIOD\r
+| 000240 911F | POP A\r
+| 000241 9310 0110 | STS BUZZ_TIME,A ; SAVE REQUESTED DURATION\r
+| 000243 CF51 | RJMP MAIN_LOOP\r
+| | \r
+| | SET_CHSET:\r
+| 000244 D239 | RCALL RX_WAIT\r
+| | SET_CHSET_A:\r
+| 000245 D130 | RCALL CHARACTER_SET_FIND ; B:Y -> CHARACTER SET\r
+| 000246 E1C0 | LDI YL,$10\r
+| 000247 93C0 0103 | STS PTR,YL\r
+| 000249 93D0 0104 | STS PTR+1,YH\r
+| 00024B 9320 0105 | STS PTR+2,B\r
+| 00024D CF47 | RJMP MAIN_LOOP\r
+| | \r
+| | SET_TIME:\r
+| 00024E E010 | LDI A,0\r
+| 00024F BD15 | OUT TCCR2,A ; STOP COUNTING WHILE SETTING CLOCK\r
+| 000250 9310 015F | STS TIME_HSEC_64K,A\r
+| 000252 9310 0160 | STS TIME_HSEC_256,A\r
+| 000254 9310 0161 | STS TIME_HSEC,A\r
+| 000256 D227 | RCALL RX_WAIT\r
+| 000257 9310 0164 | STS TIME_HOUR,A\r
+| 000259 D224 | RCALL RX_WAIT\r
+| 00025A 9310 0163 | STS TIME_MINUTE,A\r
+| 00025C D221 | RCALL RX_WAIT\r
+| 00025D 9310 0162 | STS TIME_SECOND,A\r
+| 00025F D21E | RCALL RX_WAIT\r
+| 000260 9310 0166 | STS DATE_MONTH,A\r
+| 000262 D21B | RCALL RX_WAIT\r
+| 000263 9310 0165 | STS DATE_DAY,A\r
+| 000265 D218 | RCALL RX_WAIT\r
+| 000266 9310 0167 | STS DATE_YEAR,A\r
+| 000268 E013 | LDI A,3 ; TIMER 2 DIVIDE BY 32 (4 HZ)\r
+| | ;** LDI A,6 ; TIMER 2 DIVIDE BY 256\r
+| 000269 BD15 | OUT TCCR2,A\r
+| 00026A CF2A | RJMP MAIN_LOOP\r
+| | \r
+| 00026B D001 | LF: RCALL LINE_FEED\r
+| 00026C CF28 | RJMP MAIN_LOOP\r
+| | \r
+| | LINE_FEED:\r
+| 00026D 920F | PUSH R0\r
+| 00026E 91C0 0103 | LDS YL,PTR\r
+| 000270 91D0 0104 | LDS YH,PTR+1\r
+| 000272 9120 0105 | LDS B,PTR+2\r
+| 000274 5FDE | SUBI YH,$FE\r
+| 000275 95C3 | INC YL\r
+| 000276 > A14_A18 B\r
+| 000276 94F8 > CLI\r
+| 000277 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 000279 2732 > EOR R19,B\r
+| 00027A 7E30 > ANDI R19,$E0\r
+| 00027B 2732 > EOR R19,B\r
+| 00027C BB3B > OUT PORTA,R19\r
+| 00027D 9AC4 > SBI PORTB,4\r
+| 00027E 98C4 > CBI PORTB,4\r
+| 00027F 9478 > SEI\r
+| 000280 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| 000282 D4D6 | RCALL LPMS\r
+| 000283 2F18 | MOV A,CURSORY\r
+| 000284 0D10 | ADD A,R0\r
+| 000285 0D10 | ADD A,R0\r
+| 000286 951A | DEC A\r
+| 000287 3810 | CPI A,DISPLAY_LINES\r
+| 000288 F018 | BRLO INC_CURSORY\r
+| 000289 D0C0 | RCALL GO_SCROLL\r
+| 00028A 900F | POP R0\r
+| 00028B 9508 | RET\r
+| | \r
+| | INC_CURSORY:\r
+| 00028C 0D80 | ADD CURSORY,R0\r
+| 00028D 900F | POP R0\r
+| 00028E 9508 | RET\r
+| | \r
+| | CLR_DISP:\r
+| 00028F D522 | RCALL CLEAR_DISPLAY ; CLEARS DISPLAY AND HOMES CURSOR\r
+| 000290 CF04 | RJMP MAIN_LOOP\r
+| | \r
+| | INTERPRET_MODE:\r
+| 000291 D1EC | RCALL RX_WAIT\r
+| 000292 3310 | CPI A,$30\r
+| 000293 F409 | BRNE TEXT_MODE\r
+| 000294 C004 | RJMP L01A4\r
+| | TEXT_MODE:\r
+| 000295 3311 | CPI A,$31\r
+| 000296 > RJEQ GRAPHICS_MODE\r
+| 000296 F409 > BRNE LOCAL\r
+| 000297 C004 > RJMP GRAPHICS_MODE\r
+| > LOCAL:\r
+| | ;L01A3:\r
+| 000298 CEFC | RJMP MAIN_LOOP\r
+| | \r
+| 000299 EF07 | L01A4: LDI F,$F7\r
+| 00029A 22B0 | AND FLAGS,F\r
+| 00029B CEF9 | RJMP MAIN_LOOP\r
+| | \r
+| | GRAPHICS_MODE:\r
+| 00029C E008 | LDI F,$08\r
+| 00029D 2AB0 | OR FLAGS,F\r
+| 00029E CEF6 | RJMP MAIN_LOOP\r
+| | \r
+| | PROP_FIXED_MODE:\r
+| 00029F D1DE | RCALL RX_WAIT\r
+| 0002A0 3310 | CPI A,$30\r
+| 0002A1 > RJEQ FIXED\r
+| 0002A1 F409 > BRNE LOCAL\r
+| 0002A2 C003 > RJMP FIXED\r
+| > LOCAL:\r
+| | ;L01AE:\r
+| 0002A3 3311 | CPI A,$31\r
+| 0002A4 > RJEQ PROPORTIONAL\r
+| 0002A4 F409 > BRNE LOCAL\r
+| 0002A5 C003 > RJMP PROPORTIONAL\r
+| > LOCAL:\r
+| | L01B1:\r
+| | ; RJMP MAIN_LOOP\r
+| | \r
+| 0002A6 EE0F | FIXED: LDI F,$EF\r
+| 0002A7 22B0 | AND FLAGS,F\r
+| 0002A8 CEEC | RJMP MAIN_LOOP\r
+| | \r
+| | PROPORTIONAL:\r
+| 0002A9 E100 | LDI F,$10\r
+| 0002AA 2AB0 | OR FLAGS,F\r
+| 0002AB CEE9 | RJMP MAIN_LOOP\r
+| | \r
+| | BACK_SPACE:\r
+| 0002AC 91C0 0103 | LDS YL,PTR\r
+| 0002AE 91D0 0104 | LDS YH,PTR+1\r
+| 0002B0 9120 0105 | LDS B,PTR+2\r
+| 0002B2 5FDE | SUBI YH,$FE\r
+| 0002B3 > A14_A18 B\r
+| 0002B3 94F8 > CLI\r
+| 0002B4 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 0002B6 2732 > EOR R19,B\r
+| 0002B7 7E30 > ANDI R19,$E0\r
+| 0002B8 2732 > EOR R19,B\r
+| 0002B9 BB3B > OUT PORTA,R19\r
+| 0002BA 9AC4 > SBI PORTB,4\r
+| 0002BB 98C4 > CBI PORTB,4\r
+| 0002BC 9478 > SEI\r
+| 0002BD 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| 0002BF D499 | RCALL LPMS\r
+| 0002C0 1970 | SUB CURSORX,R0\r
+| 0002C1 B71F | IN A,SREG\r
+| 0002C2 FF12 | SBRS A,2\r
+| 0002C3 CED1 | RJMP MAIN_LOOP\r
+| | \r
+| 0002C4 2777 | CR: CLR CURSORX\r
+| 0002C5 CECF | RJMP MAIN_LOOP\r
+| | \r
+| | ENABLE_CNTRL:\r
+| 0002C6 D1B7 | RCALL RX_WAIT\r
+| 0002C7 FD11 | SBRC A,1\r
+| 0002C8 C007 | RJMP ENABLE_UPDATE\r
+| 0002C9 FD10 | SBRC A,0\r
+| 0002CA C003 | RJMP ENABLE_ON\r
+| | ;ENABLE_OFF:\r
+| 0002CB ED0F | LDI F,$DF\r
+| 0002CC 22B0 | AND FLAGS,F\r
+| 0002CD CEC7 | RJMP MAIN_LOOP\r
+| | ENABLE_ON:\r
+| 0002CE E200 | LDI F,$20\r
+| 0002CF 2AB0 | OR FLAGS,F\r
+| | ENABLE_UPDATE:\r
+| 0002D0 2700 | CLR F\r
+| 0002D1 9300 013B | STS LINE_COUNT,F ; START UPDATE AT TOP OF SCREEN\r
+| | ENABLE_LOOP:\r
+| 0002D3 D2EA | RCALL NICK_SUB2 ; IMMEDIATE UPDATE OF ENTIRE SCREEN\r
+| 0002D4 F7F1 | BRNE ENABLE_LOOP\r
+| 0002D5 CEBF | RJMP MAIN_LOOP\r
+| | \r
+| | DRAW_MODE:\r
+| 0002D6 D1A7 | RCALL RX_WAIT\r
+| 0002D7 3310 | CPI A,$30\r
+| 0002D8 > RJEQ XOR_MODE\r
+| 0002D8 F409 > BRNE LOCAL\r
+| 0002D9 C004 > RJMP XOR_MODE\r
+| > LOCAL:\r
+| | ;L01D3:\r
+| 0002DA 3311 | CPI A,$31\r
+| 0002DB > RJEQ OR_MODE\r
+| 0002DB F409 > BRNE LOCAL\r
+| 0002DC C004 > RJMP OR_MODE\r
+| > LOCAL:\r
+| | ;L01D6:\r
+| 0002DD CEB7 | RJMP MAIN_LOOP\r
+| | \r
+| | XOR_MODE:\r
+| 0002DE EF0E | LDI F,$FE\r
+| 0002DF 22B0 | AND FLAGS,F\r
+| 0002E0 CEB4 | RJMP MAIN_LOOP\r
+| | \r
+| | OR_MODE:\r
+| 0002E1 E001 | LDI F,$01\r
+| 0002E2 2AB0 | OR FLAGS,F\r
+| 0002E3 CEB1 | RJMP MAIN_LOOP\r
+| | \r
+| | SET_CURSOR:\r
+| 0002E4 D199 | RCALL RX_WAIT\r
+| 0002E5 2F71 | MOV CURSORX,A\r
+| 0002E6 D197 | GET_Y: RCALL RX_WAIT\r
+| 0002E7 2F81 | MOV CURSORY,A\r
+| 0002E8 CEAC | RJMP MAIN_LOOP\r
+| | \r
+| | CLEAR_RECTANGLE:\r
+| 0002E9 E002 | LDI F,$02\r
+| 0002EA 2AB0 | OR FLAGS,F\r
+| | \r
+| | GET_RECT_SIZE:\r
+| 0002EB 9370 0152 | STS RECT_X,CURSORX\r
+| 0002ED 9380 0153 | STS RECT_Y,CURSORY\r
+| 0002EF D18E | RCALL RX_WAIT\r
+| 0002F0 9310 0154 | STS RECT_XX,A\r
+| 0002F2 D18B | RCALL RX_WAIT\r
+| 0002F3 9310 0155 | STS RECT_YY,A\r
+| 0002F5 D317 | RCALL DRAW_RECT\r
+| 0002F6 EF0D | LDI F,$FD\r
+| 0002F7 22B0 | AND FLAGS,F\r
+| 0002F8 CE9C | RJMP MAIN_LOOP\r
+| | \r
+| | GET_FILLED_RECTNC_SIZE:\r
+| 0002F9 9370 0156 | STS RECTNC_X,CURSORX\r
+| 0002FB 9380 0157 | STS RECTNC_Y,CURSORY\r
+| 0002FD D180 | RCALL RX_WAIT\r
+| 0002FE 9310 0158 | STS RECTNC_XX,A\r
+| 000300 D17D | RCALL RX_WAIT\r
+| 000301 9310 0159 | STS RECTNC_YY,A\r
+| 000303 D35E | RCALL FILLED_RECTNC\r
+| 000304 CE90 | RJMP MAIN_LOOP\r
+| | \r
+| | GET_RECTNC_SIZE:\r
+| 000305 9370 0156 | STS RECTNC_X,CURSORX\r
+| 000307 9380 0157 | STS RECTNC_Y,CURSORY\r
+| 000309 D174 | RCALL RX_WAIT\r
+| 00030A 9310 0158 | STS RECTNC_XX,A\r
+| 00030C D171 | RCALL RX_WAIT\r
+| 00030D 9310 0159 | STS RECTNC_YY,A\r
+| 00030F D377 | RCALL DRAW_RECTNC\r
+| 000310 CE84 | RJMP MAIN_LOOP\r
+| | \r
+| | CONTRAST_CONTROL:\r
+| 000311 D16C | RCALL RX_WAIT\r
+| | \r
+| 000312 FF10 | SBRS A,0\r
+| 000313 C00B | RJMP CONTRAST_DARKER\r
+| | \r
+| | ;CONTRAST_LIGHTER:\r
+| 000314 9110 010E | LDS A,CONTRASTL\r
+| 000316 9120 010F | LDS B,CONTRASTH\r
+| 000318 5F1C | SUBI A,LOW(-CONTRAST_STEP)\r
+| 000319 4F2F | SBCI B,HIGH(-CONTRAST_STEP)\r
+| | \r
+| 00031A 3B1C | CPI A,LOW(CONTRAST_MAX)\r
+| 00031B EF0D | LDI F,HIGH(CONTRAST_MAX)\r
+| 00031C 0720 | CPC B,F\r
+| 00031D F4A8 | BRSH CONTRAST_DONE\r
+| 00031E C00A | RJMP CONTRAST_WRITE\r
+| | \r
+| | CONTRAST_DARKER:\r
+| 00031F 9110 010E | LDS A,CONTRASTL\r
+| 000321 9120 010F | LDS B,CONTRASTH\r
+| 000323 5014 | SUBI A,LOW(CONTRAST_STEP)\r
+| 000324 4020 | SBCI B,HIGH(CONTRAST_STEP)\r
+| | \r
+| 000325 331A | CPI A,LOW(CONTRAST_MIN)\r
+| 000326 EF0D | LDI F,HIGH(CONTRAST_MIN)\r
+| 000327 0720 | CPC B,F\r
+| 000328 F050 | BRLO CONTRAST_DONE\r
+| | \r
+| | CONTRAST_WRITE:\r
+| 000329 9310 010E | STS CONTRASTL,A\r
+| 00032B 9320 010F | STS CONTRASTH,B\r
+| | \r
+| 00032D E022 | LDI B,EE_CONTRAST ; 20mar03 tavrasm *2\r
+| 00032E D00D | RCALL EE_WRITE\r
+| 00032F 9110 010F | LDS A,CONTRASTH\r
+| 000331 E023 | LDI B,EE_CONTRAST+1 ; 20mar03 tavrasm *2+1\r
+| 000332 D009 | RCALL EE_WRITE\r
+| | \r
+| | CONTRAST_DONE:\r
+| 000333 CE61 | RJMP MAIN_LOOP\r
+| | \r
+| | EE_READ:\r
+| 000334 99E1 | SBIC EECR,EEWE\r
+| 000335 CFFE | RJMP EE_READ ; WAIT UNTIL EEPROM BECOMES READY\r
+| | \r
+| 000336 BB2E | OUT EEARL,B\r
+| 000337 2722 | CLR B\r
+| 000338 BB2F | OUT EEARH,B ; ASSUME EEPROM ADDRESSES < $100\r
+| 000339 9AE0 | SBI EECR,EERE ; READ DATA BYTE\r
+| 00033A B31D | IN A,EEDR ; GET LATCHED DATA BYTE\r
+| 00033B 9508 | RET\r
+| | \r
+| | EE_WRITE:\r
+| 00033C 99E1 | SBIC EECR,EEWE\r
+| 00033D CFFE | RJMP EE_WRITE ; WAIT FOR EEPROM TO BECOME READY\r
+| | \r
+| 00033E FEE5 | SBRS API_STATE,EEWR_ENABLE\r
+| | EE_WRITE_HALT0:\r
+| 00033F CFFF | RJMP EE_WRITE_HALT0 ; HALT PROCESSOR IF EE WRITING DISABLED\r
+| | \r
+| 000340 BB2E | OUT EEARL,B\r
+| 000341 2722 | CLR B\r
+| 000342 BB2F | OUT EEARH,B ; ASSUME EEPROM ADDRESSES < $100\r
+| 000343 BB1D | OUT EEDR,A ; LATCH NEW VALUE\r
+| | \r
+| 000344 94F8 | CLI\r
+| 000345 FEE5 | SBRS API_STATE,EEWR_ENABLE\r
+| | EE_WRITE_HALT1:\r
+| 000346 CFFF | RJMP EE_WRITE_HALT1 ; HALT PROCESSOR IF EE WRITING DISABLED\r
+| | \r
+| 000347 9AE2 | SBI EECR,EEMWE ; MASTER WRITE ENABLE\r
+| 000348 9AE1 | SBI EECR,EEWE ; START WRITING NEW VALUE\r
+| 000349 9518 | RETI\r
+| | \r
+| | GO_SCROLL:\r
+| 00034A C736 | RJMP SCROLL\r
+| | \r
+| | CHARACTER_SET_DOWNLOAD:\r
+| 00034B D132 | RCALL RX_WAIT\r
+| 00034C D029 | RCALL CHARACTER_SET_FIND ; B:Y -> CHARACTER SET\r
+| | \r
+| 00034D D130 | RCALL RX_WAIT\r
+| 00034E 2FA1 | MOV XL,A\r
+| 00034F D12E | RCALL RX_WAIT\r
+| 000350 2FB1 | MOV XH,A\r
+| | \r
+| | CHARACTER_SET_DOWNLOAD_LOOP:\r
+| 000351 D12C | RCALL RX_WAIT\r
+| | \r
+| 000352 > A14_A18 B\r
+| 000352 94F8 > CLI\r
+| 000353 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 000355 2732 > EOR R19,B\r
+| 000356 7E30 > ANDI R19,$E0\r
+| 000357 2732 > EOR R19,B\r
+| 000358 BB3B > OUT PORTA,R19\r
+| 000359 9AC4 > SBI PORTB,4\r
+| 00035A 98C4 > CBI PORTB,4\r
+| 00035B 9478 > SEI\r
+| 00035C 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| 00035E D2A4 | RCALL GO_WRITE_BYTE\r
+| | \r
+| 00035F 9621 | ADIW YL,1\r
+| 000360 9711 | SBIW XL,1\r
+| 000361 2F1A | MOV A,XL\r
+| 000362 2B1B | OR A,XH\r
+| 000363 > RJNE CHARACTER_SET_DOWNLOAD_LOOP ; BRNE ??\r
+| 000363 F009 > BREQ LOCAL\r
+| 000364 CFEC > RJMP CHARACTER_SET_DOWNLOAD_LOOP\r
+| > LOCAL:\r
+| 000365 CE2F | RJMP MAIN_LOOP\r
+| | \r
+| | CHARACTER_SET_QUERY:\r
+| 000366 D117 | RCALL RX_WAIT\r
+| 000367 D00E | RCALL CHARACTER_SET_FIND ; B:Y -> CHARACTER SET\r
+| | \r
+| 000368 931F | PUSH A\r
+| 000369 D01A | RCALL CHARACTER_SET_CRC\r
+| | \r
+| 00036A E11B | LDI A,$1B\r
+| 00036B D133 | RCALL TX_WAIT\r
+| 00036C E31F | LDI A,'?'\r
+| 00036D D131 | RCALL TX_WAIT\r
+| 00036E 911F | POP A\r
+| 00036F 5D10 | SUBI A,-'0'\r
+| 000370 D12E | RCALL TX_WAIT\r
+| | \r
+| 000371 2F1D | MOV A,YH\r
+| 000372 D060 | RCALL TX_HEX_BYTE\r
+| 000373 2F1C | MOV A,YL\r
+| 000374 D05E | RCALL TX_HEX_BYTE\r
+| 000375 CE1F | RJMP MAIN_LOOP\r
+| | \r
+| | CHARACTER_SET_FIND:\r
+| 000376 E0C0 | LDI YL,LOW(CHSET_DSPRAM)\r
+tsv3.asm:1414: Warning : Constant 0x400 out of range (0x00-0xFF)\r
+| 000377 E0D0 | LDI YH,HIGH(CHSET_DSPRAM)<<4\r
+| 000378 E624 | LDI B,HIGH(CHSET_DSPRAM>>4)\r
+| | \r
+| 000379 701F | ANDI A,$0F\r
+| 00037A 301A | CPI A,CHARACTER_SETS\r
+| 00037B F408 | BRSH CHARACTER_SET_FIND_DONE ; DEFAULT TO SET 0\r
+| | \r
+| 00037C 0F21 | ADD B,A\r
+| | \r
+| | CHARACTER_SET_FIND_DONE:\r
+| 00037D 9526 | LSR B\r
+| 00037E 95D7 | ROR YH\r
+| 00037F 9526 | LSR B\r
+| 000380 95D7 | ROR YH\r
+| 000381 95D6 | LSR YH\r
+| 000382 95D6 | LSR YH\r
+| 000383 9508 | RET\r
+| | \r
+| | CHARACTER_SET_CRC:\r
+| 000384 E1A6 | LDI XL,LOW($216)\r
+| 000385 E0B2 | LDI XH,HIGH($216) ; PAST CRC, INDEX, CELL SIZES\r
+| 000386 0FAC | ADD XL,YL\r
+| 000387 1FBD | ADC XH,YH ; B:X -> LENGTH WORD IN CHARACTER SET\r
+| 000388 > A14_A18 B\r
+| 000388 94F8 > CLI\r
+| 000389 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 00038B 2732 > EOR R19,B\r
+| 00038C 7E30 > ANDI R19,$E0\r
+| 00038D 2732 > EOR R19,B\r
+| 00038E BB3B > OUT PORTA,R19\r
+| 00038F 9AC4 > SBI PORTB,4\r
+| 000390 98C4 > CBI PORTB,4\r
+| 000391 9478 > SEI\r
+| 000392 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| 000394 D26D | RCALL GO_READ_BYTE\r
+| 000395 2FE1 | MOV ZL,A\r
+| 000396 9611 | ADIW XL,1\r
+| 000397 D26A | RCALL GO_READ_BYTE\r
+| 000398 2FF1 | MOV ZH,A ; Z = LENGTH OF DATA INCLUDING CRC\r
+| | \r
+| 000399 2FAC | MOV XL,YL\r
+| 00039A 2FBD | MOV XH,YH\r
+| 00039B 9614 | ADIW XL,4 ; B:X -> DATA BLOCK EXCLUDING CRC\r
+| | \r
+| 00039C EFCF | LDI YL,$FF\r
+| 00039D EFDF | LDI YH,$FF ; Y = SEED FOR CRC CALCULATION\r
+| | \r
+| 00039E 9731 | SBIW ZL,1\r
+| 00039F 70FF | ANDI ZH,$0F\r
+| 0003A0 9734 | SBIW ZL,4 ; Z = LENGTH OF DATA-1 EXCLUDING CRC\r
+| 0003A1 F180 | BRLO CHARACTER_SET_CRC_DONE\r
+| 0003A2 9631 | ADIW ZL,1\r
+| | \r
+| | CHARACTER_SET_CRC_BYTE:\r
+| 0003A3 D25E | RCALL GO_READ_BYTE\r
+| 0003A4 9611 | ADIW XL,1\r
+| | \r
+| 0003A5 E201 | LDI F,$21\r
+| 0003A6 E120 | LDI B,$10 ; B:F = CRC POLYNOMIAL\r
+| 0003A7 27D1 | EOR YH,A ; Y = CRC REGISTER WITH NEW DATA BYTE\r
+| | \r
+| 0003A8 0FCC | LSL YL\r
+| 0003A9 1FDD | ROL YH\r
+| 0003AA F410 | BRCC CHARACTER_SET_CRC_BIT0\r
+| 0003AB 27C0 | EOR YL,F\r
+| 0003AC 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT0:\r
+| 0003AD 0FCC | LSL YL\r
+| 0003AE 1FDD | ROL YH\r
+| 0003AF F410 | BRCC CHARACTER_SET_CRC_BIT1\r
+| 0003B0 27C0 | EOR YL,F\r
+| 0003B1 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT1:\r
+| 0003B2 0FCC | LSL YL\r
+| 0003B3 1FDD | ROL YH\r
+| 0003B4 F410 | BRCC CHARACTER_SET_CRC_BIT2\r
+| 0003B5 27C0 | EOR YL,F\r
+| 0003B6 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT2:\r
+| 0003B7 0FCC | LSL YL\r
+| 0003B8 1FDD | ROL YH\r
+| 0003B9 F410 | BRCC CHARACTER_SET_CRC_BIT3\r
+| 0003BA 27C0 | EOR YL,F\r
+| 0003BB 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT3:\r
+| 0003BC 0FCC | LSL YL\r
+| 0003BD 1FDD | ROL YH\r
+| 0003BE F410 | BRCC CHARACTER_SET_CRC_BIT4\r
+| 0003BF 27C0 | EOR YL,F\r
+| 0003C0 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT4:\r
+| 0003C1 0FCC | LSL YL\r
+| 0003C2 1FDD | ROL YH\r
+| 0003C3 F410 | BRCC CHARACTER_SET_CRC_BIT5\r
+| 0003C4 27C0 | EOR YL,F\r
+| 0003C5 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT5:\r
+| 0003C6 0FCC | LSL YL\r
+| 0003C7 1FDD | ROL YH\r
+| 0003C8 F410 | BRCC CHARACTER_SET_CRC_BIT6\r
+| 0003C9 27C0 | EOR YL,F\r
+| 0003CA 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT6:\r
+| 0003CB 0FCC | LSL YL\r
+| 0003CC 1FDD | ROL YH\r
+| 0003CD F410 | BRCC CHARACTER_SET_CRC_BIT7\r
+| 0003CE 27C0 | EOR YL,F\r
+| 0003CF 27D2 | EOR YH,B\r
+| | CHARACTER_SET_CRC_BIT7:\r
+| | \r
+| 0003D0 9731 | SBIW ZL,1\r
+| 0003D1 F689 | BRNE CHARACTER_SET_CRC_BYTE\r
+| | \r
+| | CHARACTER_SET_CRC_DONE:\r
+| 0003D2 9508 | RET\r
+| | \r
+| | TX_HEX_BYTE:\r
+| 0003D3 931F | PUSH A\r
+| 0003D4 9512 | SWAP A\r
+| 0003D5 D004 | RCALL HEX_NIBBLE\r
+| 0003D6 D0C8 | RCALL TX_WAIT\r
+| 0003D7 911F | POP A\r
+| 0003D8 D001 | RCALL HEX_NIBBLE\r
+| 0003D9 C0C5 | RJMP TX_WAIT\r
+| | \r
+| | HEX_NIBBLE:\r
+| 0003DA 701F | ANDI A,$0F\r
+| 0003DB 6310 | ORI A,$30\r
+| 0003DC 331A | CPI A,$3A\r
+| 0003DD F008 | BRLO HEX_NIBBLE_DONE\r
+| 0003DE 5F19 | SUBI A,-7\r
+| | HEX_NIBBLE_DONE:\r
+| 0003DF 9508 | RET\r
+| | \r
+| | SAVE_STATE:\r
+| 0003E0 D09D | RCALL RX_WAIT\r
+| 0003E1 FD10 | SBRC A,0\r
+| 0003E2 C013 | RJMP RESTORE_STATE\r
+| | \r
+| | SAVE_ENTRY:\r
+| 0003E3 9370 016C | STS CURSORX_SAVE,CURSORX\r
+| 0003E5 9380 016D | STS CURSORY_SAVE,CURSORY\r
+| 0003E7 92B0 016E | STS FLAGS_SAVE,FLAGS\r
+| 0003E9 9110 0103 | LDS A,PTR\r
+| 0003EB 9310 016F | STS PTR_SAVE,A\r
+| 0003ED 9110 0104 | LDS A,PTR+1\r
+| 0003EF 9310 0170 | STS PTR_SAVE+1,A\r
+| 0003F1 9110 0105 | LDS A,PTR+2\r
+| 0003F3 9310 0171 | STS PTR_SAVE+2,A\r
+| 0003F5 CD9F | RJMP MAIN_LOOP\r
+| | \r
+| | RESTORE_STATE:\r
+| 0003F6 9170 016C | LDS CURSORX,CURSORX_SAVE\r
+| 0003F8 9180 016D | LDS CURSORY,CURSORY_SAVE\r
+| 0003FA EC10 | LDI A,$C0\r
+| 0003FB 22B1 | AND FLAGS,A\r
+| 0003FC 9110 016E | LDS A,FLAGS_SAVE\r
+| 0003FE 731F | ANDI A,$3F\r
+| 0003FF 2AB1 | OR FLAGS,A\r
+| 000400 9110 016F | LDS A,PTR_SAVE\r
+| 000402 9310 0103 | STS PTR,A\r
+| 000404 9110 0170 | LDS A,PTR_SAVE+1\r
+| 000406 9310 0104 | STS PTR+1,A\r
+| 000408 9110 0171 | LDS A,PTR_SAVE+2\r
+| 00040A 9310 0105 | STS PTR+2,A\r
+| 00040C CD88 | RJMP MAIN_LOOP\r
+| | \r
+| | TOUCH_ZONE:\r
+| 00040D D070 | RCALL RX_WAIT\r
+| 00040E 9310 015A | STS TOUCH_KEY,A\r
+| | \r
+| 000410 D06D | RCALL RX_WAIT\r
+| 000411 2FC1 | MOV YL,A\r
+| 000412 5F17 | SUBI A,-9\r
+| 000413 D05D | RCALL DIVIDE_10\r
+| 000414 9320 015B | STS TOUCH_X,B\r
+| | \r
+| 000416 D067 | RCALL RX_WAIT\r
+| 000417 2FD1 | MOV YH,A\r
+| 000418 5F1C | SUBI A,-4\r
+| 000419 D05C | RCALL DIVIDE_13\r
+| 00041A 9320 015C | STS TOUCH_Y,B\r
+| | \r
+| 00041C D061 | RCALL RX_WAIT\r
+| 00041D 0F1C | ADD A,YL\r
+| 00041E 501F | SUBI A,15\r
+| 00041F D051 | RCALL DIVIDE_10\r
+| 000420 9320 015D | STS TOUCH_XX,B\r
+| | \r
+| 000422 D05B | RCALL RX_WAIT\r
+| 000423 0F1D | ADD A,YH\r
+| 000424 5111 | SUBI A,17\r
+| 000425 D050 | RCALL DIVIDE_13\r
+| 000426 9320 015E | STS TOUCH_YY,B\r
+| | \r
+| 000428 91D0 015C | LDS YH,TOUCH_Y\r
+| | TOUCH_ZONE_Y:\r
+| 00042A 9110 015E | LDS A,TOUCH_YY\r
+| 00042C 1B1D | SUB A,YH\r
+| 00042D F408 | BRSH TOUCH_ZONE_Y_CONT\r
+| 00042E C041 | RJMP TOUCH_ZONE_Y_END\r
+| | TOUCH_ZONE_Y_CONT:\r
+| | \r
+| 00042F 91C0 015B | LDS YL,TOUCH_X\r
+| 000431 2F1C | MOV A,YL\r
+| 000432 0F1D | ADD A,YH\r
+| 000433 2F2D | MOV B,YH\r
+| 000434 0F22 | LSL B\r
+| 000435 0F22 | LSL B\r
+| 000436 0F22 | LSL B\r
+| 000437 0F12 | ADD A,B\r
+| 000438 0F22 | LSL B\r
+| 000439 0F12 | ADD A,B\r
+| | \r
+| 00043A E0A0 | LDI XL,LOW(RTN_DSPRAM)\r
+| 00043B EEB0 | LDI XH,HIGH(RTN_DSPRAM) ;<<2\r
+| 00043C E020 | LDI B,0\r
+| 00043D 0FA1 | ADD XL,A\r
+| 00043E 1FB2 | ADC XH,B\r
+| | \r
+| 00043F E12B | LDI B,HIGH(RTN_DSPRAM>>6) ; B:X -> RETURN CODE TABLE\r
+| 000440 > A14_A18 B\r
+| 000440 94F8 > CLI\r
+| 000441 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 000443 2732 > EOR R19,B\r
+| 000444 7E30 > ANDI R19,$E0\r
+| 000445 2732 > EOR R19,B\r
+| 000446 BB3B > OUT PORTA,R19\r
+| 000447 9AC4 > SBI PORTB,4\r
+| 000448 98C4 > CBI PORTB,4\r
+| 000449 9478 > SEI\r
+| 00044A 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| | \r
+| | TOUCH_ZONE_X:\r
+| 00044C 9110 015D | LDS A,TOUCH_XX\r
+| 00044E 1B1C | SUB A,YL\r
+| 00044F F0F0 | BRLO TOUCH_ZONE_X_END\r
+| | \r
+| 000450 > A0_A13 XL,XH\r
+| 000450 2F3A > MOV R19,XL\r
+| 000451 733F > ANDI R19,$3F\r
+| 000452 BB35 > OUT PORTC,R19\r
+| > \r
+| 000453 2F3B > MOV R19,XH\r
+| 000454 0F33 > LSL R19\r
+| 000455 0F33 > LSL R19\r
+| 000456 FBA7 > BST XL,7 ; A7\r
+| 000457 F931 > BLD R19,1\r
+| 000458 FBA6 > BST XL,6 ; A6\r
+| 000459 F930 > BLD R19,0\r
+| 00045A BB3B > OUT PORTA,R19\r
+| 00045B 94F8 > CLI\r
+| 00045C 9AC3 > SBI PORTB,3\r
+| 00045D 98C3 > CBI PORTB,3\r
+| 00045E 9478 > SEI\r
+| 00045F 9330 0118 > STS LATCH11_SAV,R19\r
+| 000461 9110 015A | LDS A,TOUCH_KEY\r
+| 000463 > RAMWR A ; WRITE DATA TO DSPRAM\r
+| 000463 BB1B > OUT PORTA,A\r
+| 000464 94F8 > CLI\r
+| 000465 98C1 > CBI PORTB,1\r
+| 000466 98C0 > CBI PORTB,0\r
+| 000467 0000 > NOP\r
+| 000468 9AC0 > SBI PORTB,0\r
+| 000469 9478 > SEI\r
+| 00046A 9AC1 > SBI PORTB,1\r
+| | \r
+| 00046B 9611 | ADIW XL,1\r
+| 00046C 95C3 | INC YL\r
+| 00046D CFDE | RJMP TOUCH_ZONE_X\r
+| | \r
+| | TOUCH_ZONE_X_END:\r
+| 00046E 95D3 | INC YH\r
+| 00046F CFBA | RJMP TOUCH_ZONE_Y\r
+| | \r
+| | TOUCH_ZONE_Y_END:\r
+| 000470 CD24 | RJMP MAIN_LOOP\r
+| | \r
+| | DIVIDE_10:\r
+| 000471 EF2F | LDI B,-1\r
+| | DIVIDE_10_LOOP:\r
+| 000472 9523 | INC B\r
+| 000473 501A | SUBI A,10\r
+| 000474 F7E8 | BRCC DIVIDE_10_LOOP\r
+| 000475 9508 | RET\r
+| | \r
+| | DIVIDE_13:\r
+| 000476 EF2F | LDI B,-1\r
+| | DIVIDE_13_LOOP:\r
+| 000477 9523 | INC B\r
+| 000478 501D | SUBI A,13\r
+| 000479 F7E8 | BRCC DIVIDE_13_LOOP\r
+| 00047A 9508 | RET\r
+| | \r
+| | NULLSUB2:\r
+| 00047B D002 | RCALL RX_WAIT\r
+| | \r
+| | NULLSUB:\r
+| 00047C D001 | RCALL RX_WAIT\r
+| 00047D CD17 | RJMP MAIN_LOOP\r
+| | \r
+| | RX_WAIT:\r
+| 00047E EC10 | LDI A,-$40\r
+| 00047F 9310 016B | STS BREAK_COUNT,A ; SET VERY SHORT BREAK TIMEOUT\r
+| | \r
+| | RX_WAIT_LOOP:\r
+| | ; FORMERLY DONE IN TIMER 2 OVERFLOW INTERRUPT\r
+| 000481 95A8 | WDR\r
+| | \r
+| 000482 E010 | LDI A,0\r
+| 000483 BB1E | OUT EEARL,A ; RESET EEPROM ADDRESS REG WHILE IDLE\r
+| 000484 BB1F | OUT EEARH,A\r
+| | \r
+| 000485 EC10 | LDI A,-$40\r
+| 000486 9980 | SBIC PIND,0 ; RXD HIGH?\r
+| 000487 9310 016B | STS BREAK_COUNT,A ; YES, TOP UP VERY SHORT BREAK TIMEOUT\r
+| | \r
+| 000489 FCB5 | SBRC FLAGS,5 ; DISPLAY ENABLED?\r
+| 00048A D133 | RCALL NICK_SUB2 ; IF SO, COPY 1 LINE ACCORDING TO FLAGS\r
+| | \r
+| 00048B 2033 | TST RX_COUNT\r
+| 00048C F3A1 | BREQ RX_WAIT_LOOP\r
+| | \r
+| 00048D E010 | LDI A,0 ; SET LONGEST POSSIBLE BREAK TIMEOUT\r
+| 00048E 9310 016B | STS BREAK_COUNT,A ; WHILE PROCESSING CHARACTER\r
+| | \r
+| | RX_CHAR:\r
+| 000490 > MRX_CHAR\r
+| 000490 93CF > PUSH YL\r
+| 000491 93DF > PUSH YH\r
+| > \r
+| 000492 2DC2 > MOV YL,RX_PTR\r
+| 000493 58C0 > SUBI YL,-RX_BUF\r
+| 000494 27DD > CLR YH\r
+| 000495 8118 > LD A,Y\r
+| > \r
+| 000496 94F8 > CLI\r
+| 000497 943A > DEC RX_COUNT\r
+| 000498 9423 > INC RX_PTR\r
+| 000499 E7CF > LDI YL,RX_SIZE-1\r
+| 00049A 222C > AND RX_PTR,YL\r
+| 00049B 9478 > SEI\r
+| > \r
+| 00049C 91DF > POP YH\r
+| 00049D 91CF > POP YL\r
+| 00049E 9508 > RET\r
+| > ; FALL INTO MTX_WAIT FOR LOOPBACK TEST\r
+| | TX_WAIT:\r
+| 00049F > MTX_WAIT\r
+| 00049F 931F > PUSH A\r
+| > TX_WAIT_LOOP:\r
+| 0004A0 95A8 > WDR ; 10OCT02 ALTHOUGH IT USUALLY DOESN'T MATTER (HANDY FOR LOOPBACK)\r
+| 0004A1 2D15 > MOV A,TX_COUNT\r
+| 0004A2 3210 > CPI A,TX_SIZE\r
+| 0004A3 F7E0 > BRSH TX_WAIT_LOOP\r
+| 0004A4 911F > POP A\r
+| | TX_CHAR:\r
+| 0004A5 > MTX_CHAR\r
+| 0004A5 93CF > PUSH YL\r
+| 0004A6 93DF > PUSH YH\r
+| 0004A7 B7DF > IN YH,SREG\r
+| 0004A8 94F8 > CLI\r
+| 0004A9 2DC5 > MOV YL,TX_COUNT\r
+| 0004AA 0DC4 > ADD YL,TX_PTR\r
+| 0004AB BFDF > OUT SREG,YH ;SEI\r
+| 0004AC 71CF > ANDI YL,TX_SIZE-1\r
+| 0004AD 5AC0 > SUBI YL,-TX_BUF\r
+| 0004AE 27DD > CLR YH\r
+| 0004AF 8318 > ST Y,A\r
+| > \r
+| 0004B0 9453 > INC TX_COUNT\r
+| > \r
+| 0004B1 91DF > POP YH\r
+| 0004B2 91CF > POP YL\r
+| 0004B3 9508 > RET\r
+| | \r
+| | DRAW_CHAR_TTY:\r
+| 0004B4 D0D2 | RCALL FIND_CHAR ; SET UP CHAR_PTR FROM A = CHAR\r
+| 0004B5 D0EF | RCALL CHAR_WIDTH ; SET UP R0 = PROP WIDTH FROM CHAR PTR\r
+| | \r
+| 0004B6 2700 | CLR F\r
+| 0004B7 9300 0112 | STS TEMP,F ; NUDGE FOR FIXED SPACING MODE\r
+| | \r
+| 0004B9 FCB4 | SBRC FLAGS,4\r
+| 0004BA C00F | RJMP PROP_MODE ; FORCED TO FIXED SPACING MODE?\r
+| | \r
+| 0004BB 91C0 0103 | LDS YL,PTR\r
+| 0004BD 91D0 0104 | LDS YH,PTR+1\r
+| 0004BF 5FDE | SUBI YH,$FE\r
+| 0004C0 2CF0 | MOV W,R0\r
+| 0004C1 D297 | RCALL LPMS ; GET R0 = CELL WIDTH FOR CHARACTER SET\r
+| 0004C2 920F | PUSH R0\r
+| 0004C3 180F | SUB R0,W\r
+| 0004C4 F408 | BRCC NUDGE_OK\r
+| 0004C5 2400 | CLR R0 ; NO NEGATIVE CENTRING\r
+| | NUDGE_OK:\r
+| 0004C6 9406 | LSR R0\r
+| 0004C7 9200 0112 | STS TEMP,R0\r
+| 0004C9 900F | POP R0 ; RESTORE R0 = FIXED CELL WIDTH\r
+| | \r
+| | PROP_MODE:\r
+| 0004CA FCB3 | SBRC FLAGS,3\r
+| 0004CB C008 | RJMP OK_LINE ; FORCED TO GRAPHICS MODE?\r
+| | \r
+| 0004CC 2F07 | MOV F,CURSORX\r
+| 0004CD 0D00 | ADD F,R0 ; CHECK IF CHAR WILL FIT ON THIS LINE\r
+| 0004CE F428 | BRCC OK_LINE\r
+| | \r
+| 0004CF 2777 | CLR CURSORX\r
+| 0004D0 DD9C | RCALL LINE_FEED ; NO, WRAP CURSOR PRIOR TO DRAWING CHAR\r
+| | \r
+| 0004D1 9110 0105 | LDS A,PTR+2\r
+| 0004D3 D6B9 | RCALL SELECT_XPAGE ; IN CASE WE SCROLLED THE DISPLAY\r
+| | \r
+| | OK_LINE:\r
+| 0004D4 9100 0112 | LDS F,TEMP\r
+| 0004D6 0F07 | ADD F,CURSORX\r
+| 0004D7 9300 014E | STS CHAR_X,F\r
+| 0004D9 9380 014F | STS CHAR_Y,CURSORY ; SET UP TOP LEFT COORDINATES\r
+| | \r
+| 0004DB 0D70 | ADD CURSORX,R0 ; ADVANCE CURSOR\r
+| | \r
+| | DRAW_CHAR:\r
+| 0004DC 9160 014E | LDS XPIXEL,CHAR_X\r
+| 0004DE 9090 014F | LDS LINE_CNT,CHAR_Y\r
+| | \r
+| 0004E0 FE86 | SBRS X_SIZE,6\r
+| 0004E1 C007 | RJMP Y_OFFSET_DONE ; Y OFFSET FOUND?\r
+| | \r
+| 0004E2 91C0 0150 | LDS YL,CHAR_PTR\r
+| 0004E4 91D0 0151 | LDS YH,CHAR_PTR+1\r
+| 0004E6 9722 | SBIW YL,$02\r
+| 0004E7 D271 | RCALL LPMS\r
+| 0004E8 0C90 | ADD LINE_CNT,R0\r
+| | \r
+| | Y_OFFSET_DONE:\r
+| 0004E9 FE87 | SBRS X_SIZE,7\r
+| 0004EA C007 | RJMP X_OFFSET_DONE ; X OFFSET FOUND?\r
+| | \r
+| 0004EB 91C0 0150 | LDS YL,CHAR_PTR\r
+| 0004ED 91D0 0151 | LDS YH,CHAR_PTR+1\r
+| 0004EF 9723 | SBIW YL,$03\r
+| 0004F0 D268 | RCALL LPMS\r
+| 0004F1 0D60 | ADD XPIXEL,R0\r
+| | \r
+| | X_OFFSET_DONE:\r
+| 0004F2 D25A | RCALL CALCULATE_XBYTE\r
+| 0004F3 9360 0102 | STS XPIXEL_SAV,XPIXEL\r
+| 0004F5 92A0 0100 | STS XBYTE_SAV,XBYTE\r
+| | \r
+| 0004F7 91C0 0150 | LDS YL,CHAR_PTR\r
+| 0004F9 91D0 0151 | LDS YH,CHAR_PTR+1\r
+| 0004FB 9621 | ADIW YL,$01\r
+| 0004FC D25C | RCALL LPMS ; GET R0 = Y LINES FOR CHARACTER\r
+| 0004FD 2C70 | MOV Y_SIZE,R0\r
+| | \r
+| 0004FE EF0F | LDI F,$FF\r
+| 0004FF BB0A | OUT DDRA,F\r
+| 000500 9AC0 | SBI PORTB,0 ; REMOVE_CS\r
+| 000501 E10F | LDI F,$1F\r
+| 000502 2280 | AND X_SIZE,F\r
+| 000503 9280 0101 | STS X_SIZE_SAV,X_SIZE\r
+| 000505 2700 | CLR F\r
+| 000506 1280 | CPSE X_SIZE,F\r
+| 000507 C001 | RJMP DRAW_IT\r
+| 000508 C07D | RJMP DONE\r
+| | \r
+| | DRAW_IT:\r
+| 000509 27AA | CLR XL\r
+| 00050A 2DB9 | MOV XH,LINE_CNT\r
+| 00050B 95B6 | LSR XH\r
+| 00050C 95A7 | ROR XL\r
+| 00050D 95B6 | LSR XH\r
+| 00050E 95A7 | ROR XL\r
+| 00050F 5EB0 | SUBI XH,HIGH(-DRAW_DSPRAM) ; DRAW INTO DRAWING BUFFER\r
+| 000510 C007 | RJMP FIRSTT\r
+| | \r
+| 000511 9493 | MORE_Y: INC LINE_CNT\r
+| 000512 5CA0 | SUBI XL,LOW(-$40)\r
+| 000513 4FBF | SBCI XH,HIGH(-$40)\r
+| | \r
+| 000514 9080 0101 | LDS X_SIZE,X_SIZE_SAV\r
+| 000516 90A0 0100 | LDS XBYTE,XBYTE_SAV\r
+| | \r
+| 000518 2AAA | FIRSTT: OR XBYTE,XL\r
+| 000519 2722 | CLR B ; RESIDUAL\r
+| | \r
+| 00051A 9621 | MORE_X: ADIW YL,$01\r
+| 00051B 9110 0105 | LDS A,PTR+2\r
+| 00051D D66F | RCALL SELECT_XPAGE\r
+| 00051E D23A | RCALL LPMS\r
+| | \r
+| 00051F 2711 | CLR A\r
+| 000520 9160 0102 | LDS XPIXEL,XPIXEL_SAV\r
+| 000522 2366 | TST XPIXEL\r
+| 000523 F039 | BREQ OUT_DATA\r
+| | \r
+| 000524 9488 | CLC\r
+| | SHIFT_AGAIN:\r
+| 000525 9407 | ROR R0\r
+| 000526 9517 | ROR A\r
+| 000527 956A | DEC XPIXEL\r
+| 000528 F7E1 | BRNE SHIFT_AGAIN\r
+| | \r
+| 000529 2A02 | OR R0,B\r
+| 00052A 2F21 | MOV B,A\r
+| | \r
+| | OUT_DATA:\r
+| 00052B E108 | LDI F,HIGH(DRAW_DSPRAM>>6)\r
+| 00052C > A14_A18 F\r
+| 00052C 94F8 > CLI\r
+| 00052D 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 00052F 2730 > EOR R19,F\r
+| 000530 7E30 > ANDI R19,$E0\r
+| 000531 2730 > EOR R19,F\r
+| 000532 BB3B > OUT PORTA,R19\r
+| 000533 9AC4 > SBI PORTB,4\r
+| 000534 98C4 > CBI PORTB,4\r
+| 000535 9478 > SEI\r
+| 000536 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| 000538 > A0_A13 XBYTE,XH\r
+| 000538 2D3A > MOV R19,XBYTE\r
+| 000539 733F > ANDI R19,$3F\r
+| 00053A BB35 > OUT PORTC,R19\r
+| > \r
+| 00053B 2F3B > MOV R19,XH\r
+| 00053C 0F33 > LSL R19\r
+| 00053D 0F33 > LSL R19\r
+| 00053E FAA7 > BST XBYTE,7 ; A7\r
+| 00053F F931 > BLD R19,1\r
+| 000540 FAA6 > BST XBYTE,6 ; A6\r
+| 000541 F930 > BLD R19,0\r
+| 000542 BB3B > OUT PORTA,R19\r
+| 000543 94F8 > CLI\r
+| 000544 9AC3 > SBI PORTB,3\r
+| 000545 98C3 > CBI PORTB,3\r
+| 000546 9478 > SEI\r
+| 000547 9330 0118 > STS LATCH11_SAV,R19\r
+| 000549 > RAMRXW R0,F\r
+| 000549 2700 > CLR F\r
+| 00054A BB0A > OUT DDRA,F\r
+| 00054B 94F8 > CLI\r
+| 00054C 98C0 > CBI PORTB,0\r
+| 00054D 0000 > NOP\r
+| 00054E 98C1 > CBI PORTB,1\r
+| 00054F B309 > IN F,PINA\r
+| 000550 2600 > EOR R0,F\r
+| 000551 FCB0 > SBRC FLAGS,0\r
+| 000552 2A00 > OR R0,F\r
+| 000553 EF0F > LDI F,$FF\r
+| 000554 BB0A > OUT DDRA,F\r
+| 000555 BA0B > OUT PORTA,R0\r
+| 000556 0000 > NOP\r
+| 000557 9AC0 > SBI PORTB,0\r
+| 000558 9478 > SEI\r
+| 000559 9AC1 > SBI PORTB,1\r
+| | \r
+| 00055A 94A3 | INC XBYTE\r
+| 00055B 948A | DEC X_SIZE\r
+| 00055C > RJNE MORE_X\r
+| 00055C F009 > BREQ LOCAL\r
+| 00055D CFBC > RJMP MORE_X\r
+| > LOCAL:\r
+| | \r
+| 00055E 2322 | TST B\r
+| 00055F F111 | BREQ SKIP_FINAL\r
+| 000560 > A0_A13 XBYTE,XH\r
+| 000560 2D3A > MOV R19,XBYTE\r
+| 000561 733F > ANDI R19,$3F\r
+| 000562 BB35 > OUT PORTC,R19\r
+| > \r
+| 000563 2F3B > MOV R19,XH\r
+| 000564 0F33 > LSL R19\r
+| 000565 0F33 > LSL R19\r
+| 000566 FAA7 > BST XBYTE,7 ; A7\r
+| 000567 F931 > BLD R19,1\r
+| 000568 FAA6 > BST XBYTE,6 ; A6\r
+| 000569 F930 > BLD R19,0\r
+| 00056A BB3B > OUT PORTA,R19\r
+| 00056B 94F8 > CLI\r
+| 00056C 9AC3 > SBI PORTB,3\r
+| 00056D 98C3 > CBI PORTB,3\r
+| 00056E 9478 > SEI\r
+| 00056F 9330 0118 > STS LATCH11_SAV,R19\r
+| 000571 > RAMRXW B,F\r
+| 000571 2700 > CLR F\r
+| 000572 BB0A > OUT DDRA,F\r
+| 000573 94F8 > CLI\r
+| 000574 98C0 > CBI PORTB,0\r
+| 000575 0000 > NOP\r
+| 000576 98C1 > CBI PORTB,1\r
+| 000577 B309 > IN F,PINA\r
+| 000578 2720 > EOR B,F\r
+| 000579 FCB0 > SBRC FLAGS,0\r
+| 00057A 2B20 > OR B,F\r
+| 00057B EF0F > LDI F,$FF\r
+| 00057C BB0A > OUT DDRA,F\r
+| 00057D BB2B > OUT PORTA,B\r
+| 00057E 0000 > NOP\r
+| 00057F 9AC0 > SBI PORTB,0\r
+| 000580 9478 > SEI\r
+| 000581 9AC1 > SBI PORTB,1\r
+| | \r
+| | SKIP_FINAL:\r
+| 000582 D031 | RCALL NICK_SUB1\r
+| 000583 947A | DEC Y_SIZE\r
+| 000584 > RJNE MORE_Y\r
+| 000584 F009 > BREQ LOCAL\r
+| 000585 CF8B > RJMP MORE_Y\r
+| > LOCAL:\r
+| | \r
+| 000586 9508 | DONE: RET\r
+| | \r
+| | FIND_CHAR:\r
+| 000587 2FC1 | MOV YL,A\r
+| 000588 27DD | CLR YH\r
+| 000589 0FCC | LSL YL\r
+| 00058A 1FDD | ROL YH\r
+| 00058B 9110 0103 | LDS A,PTR\r
+| 00058D 0FC1 | ADD YL,A\r
+| 00058E 9110 0104 | LDS A,PTR+1\r
+| 000590 1FD1 | ADC YH,A\r
+| 000591 9110 0105 | LDS A,PTR+2\r
+| 000593 D5F9 | RCALL SELECT_XPAGE\r
+| 000594 D1C4 | RCALL LPMS\r
+| 000595 9621 | ADIW YL,$01\r
+| 000596 2CF0 | MOV W,R0\r
+| 000597 D1C1 | RCALL LPMS\r
+| 000598 2DCF | MOV YL,W\r
+| 000599 2DD0 | MOV YH,R0\r
+| 00059A 9110 0103 | LDS A,PTR\r
+| 00059C 0FC1 | ADD YL,A\r
+| 00059D 9110 0104 | LDS A,PTR+1\r
+| 00059F 1FD1 | ADC YH,A\r
+| 0005A0 93C0 0150 | STS CHAR_PTR,YL\r
+| 0005A2 93D0 0151 | STS CHAR_PTR+1,YH\r
+| 0005A4 9508 | RET\r
+| | \r
+| | CHAR_WIDTH:\r
+| 0005A5 91C0 0150 | LDS YL,CHAR_PTR\r
+| 0005A7 91D0 0151 | LDS YH,CHAR_PTR+1\r
+| 0005A9 D1AF | RCALL LPMS\r
+| 0005AA 2C80 | MOV X_SIZE,R0\r
+| 0005AB 9721 | SBIW YL,$01\r
+| 0005AC FC85 | SBRC X_SIZE,5\r
+| 0005AD C1AB | RJMP LPMS ; PROPORTIONAL WIDTH IS PRESENT\r
+| 0005AE 91C0 0103 | LDS YL,PTR\r
+| 0005B0 91D0 0104 | LDS YH,PTR+1\r
+| 0005B2 5FDE | SUBI YH,$FE\r
+| 0005B3 C1A5 | RJMP LPMS ; NO PROPORTIONAL WIDTH, USE CELL WIDTH\r
+| | \r
+| | NICK_SUB1: ; SET FLAG FOR COPY, LINE_CNT\r
+| 0005B4 93CF | PUSH YL\r
+| 0005B5 93DF | PUSH YH\r
+| | \r
+| 0005B6 2D19 | MOV A,LINE_CNT\r
+| 0005B7 D039 | RCALL FIND_BIT\r
+| 0005B8 8118 | LD A,Y\r
+| 0005B9 2B12 | OR A,B\r
+| 0005BA 8318 | ST Y,A\r
+| | \r
+| 0005BB 91DF | POP YH\r
+| 0005BC 91CF | POP YL\r
+| 0005BD 9508 | RET\r
+| | \r
+| | NICK_SUB2: ; TEST FLAG AND COPY, LINE_COUNT\r
+| 0005BE 932F | PUSH B\r
+| 0005BF 93CF | PUSH YL\r
+| 0005C0 93DF | PUSH YH\r
+| | \r
+| 0005C1 9110 013B | LDS A,LINE_COUNT\r
+| 0005C3 D02D | RCALL FIND_BIT\r
+| 0005C4 8118 | LD A,Y\r
+| 0005C5 2312 | AND A,B\r
+| 0005C6 > RJEQ NICK_SUB2_DONE\r
+| 0005C6 F409 > BRNE LOCAL\r
+| 0005C7 C01F > RJMP NICK_SUB2_DONE\r
+| > LOCAL:\r
+| | \r
+| 0005C8 8128 | LD B,Y\r
+| 0005C9 2721 | EOR B,A\r
+| 0005CA 8328 | ST Y,B\r
+| | \r
+| | ; LET'S BE SAFE\r
+| 0005CB E010 | LDI A,0 ; SET LONGEST POSSIBLE BREAK TIMEOUT\r
+| 0005CC 9310 016B | STS BREAK_COUNT,A ; WHILE COPYING TO DISPLAY BUFFER\r
+| | \r
+| 0005CE 93AF | PUSH XL\r
+| 0005CF 93BF | PUSH XH\r
+| | \r
+| 0005D0 27CC | CLR YL\r
+| 0005D1 91D0 013B | LDS YH,LINE_COUNT\r
+| 0005D3 95D6 | LSR YH\r
+| 0005D4 95C7 | ROR YL\r
+| 0005D5 95D6 | LSR YH\r
+| 0005D6 95C7 | ROR YL ; Y -> DISPLAY BUFFER\r
+| | \r
+| 0005D7 2FAC | MOV XL,YL\r
+| 0005D8 2FBD | MOV XH,YH\r
+| 0005D9 5EB0 | SUBI XH,HIGH(-DRAW_DSPRAM) ; X -> DRAWING BUFFER\r
+| | \r
+| 0005DA E118 | LDI A,HIGH(DRAW_DSPRAM>>6)\r
+| 0005DB D5B1 | RCALL SELECT_XPAGE\r
+| | \r
+| 0005DC E220 | LDI B,32\r
+| 0005DD D56C | RCALL COPY_BYTES ; 240 PIXELS, PLUS 16 FOR SAMSUNG\r
+| | \r
+| 0005DE 9712 | SBIW XL,2\r
+| 0005DF 9626 | ADIW YL,6\r
+| 0005E0 E022 | LDI B,2\r
+| 0005E1 D568 | RCALL COPY_BYTES ; REPEAT FINAL 16 PIXELS FOR HYUNDAI\r
+| | \r
+| 0005E2 91BF | POP XH\r
+| 0005E3 91AF | POP XL\r
+| | \r
+| 0005E4 EC10 | LDI A,-$40\r
+| 0005E5 9310 016B | STS BREAK_COUNT,A ; SET VERY SHORT BREAK TIMEOUT\r
+| | \r
+| | NICK_SUB2_DONE:\r
+| 0005E7 9110 013B | LDS A,LINE_COUNT\r
+| 0005E9 9513 | INC A\r
+| 0005EA 771F | ANDI A,DISPLAY_LINES-1\r
+| 0005EB 9310 013B | STS LINE_COUNT,A\r
+| | \r
+| 0005ED 91DF | POP YH\r
+| 0005EE 91CF | POP YL\r
+| 0005EF 912F | POP B\r
+| 0005F0 9508 | RET\r
+| | \r
+| | ; NEW CODE: (NOT WORKING YET)\r
+| | ; WE HAVE JUST DRAWN INTO THE DRAWING BUFFER AT $62000,\r
+| | ; AND NOW WANT TO COPY THE DOT ROW CONCERNED\r
+| | ; TO THE THE DISPLAY BUFFER AT $60000\r
+| | ; CLI\r
+| | ;\r
+| | ; PUSH YL\r
+| | ; PUSH XL\r
+| | ; PUSH XH\r
+| | ;\r
+| | ; A0_A13 YL,YH\r
+| | ;\r
+| | ; LDI XL,LOW(ROWBUF) ; SRAM BUFFER FOR BLOCK READ\r
+| | ; LDI XH,HIGH(ROWBUF)\r
+| | ; CLR A\r
+| | ; OUT DDRA,A ; PORTA INPUT\r
+| | ; CBI PORTB,0 ; CS ON\r
+| | ; IN YL,PORTC\r
+| | ; ANDI YL,$C0 ; POINT TO START OF ROW\r
+| | ; LDI B,$20 ; COPYING 32 BYTES\r
+| | ;NSUB0: OUT PORTC,YL ; SET ADDRESS\r
+| | ; INC YL ; NEED SOME DELAY HERE\r
+| | ; DEC B\r
+| | ; IN A,PINA ; READ DATA\r
+| | ; ST X+,A ; SAVE IN ROW BUFFER\r
+| | ; BRNE NSUB0\r
+| | ; SBI PORTB,0 ; CS OFF\r
+| | ; SER A\r
+| | ; OUT DDRA,A ; PORTA OUTPUT\r
+| | ;\r
+| | ; LDI XL,LOW(ROWBUF) ; SRAM BUFFER FOR BLOCK READ\r
+| | ; LDI XH,HIGH(ROWBUF)\r
+| | ;\r
+| | ; LDI A,LATCH11_SAV\r
+| | ; ANDI A,$7F ; POINT TO $2000 LOWER\r
+| | ; OUT PORTA,A\r
+| | ; SBI PORTB,3\r
+| | ; CBI PORTB,3\r
+| | ;\r
+| | ; IN YL,PORTC\r
+| | ; ANDI YL,$C0 ; POINT TO START OF ROW\r
+| | ; LDI B,$20 ; COPYING 32 BYTES\r
+| | ; CBI PORTB,1 ; WE ON\r
+| | ;NSUB1: OUT PORTC,YL ; SET ADDRESS\r
+| | ; LD A,X+ ; GET DATA FROM ROW BUFFER\r
+| | ; OUT PORTA,A\r
+| | ; INC YL ; MAY AS WELL DELAY HERE\r
+| | ; DEC B\r
+| | ; CBI PORTB,0 ; CS ON\r
+| | ; SBI PORTB,0 ; CS OFF\r
+| | ; BRNE NSUB1\r
+| | ;\r
+| | ; ADDI YL,7 ; SHIFT LAST 2 BYTES FOR HYUNDAI\r
+| | ; OUT PORTC,YL ; SET ADDRESS\r
+| | ; CBI PORTB,0 ; CS ON\r
+| | ; SBI PORTB,0 ; CS OFF\r
+| | ; DEC YL\r
+| | ; OUT PORTC,YL ; SET ADDRESS\r
+| | ; SBIW XL,2\r
+| | ; LD A,X\r
+| | ; OUT PORTA,A\r
+| | ; CBI PORTB,0 ; CS ON\r
+| | ; SBI PORTB,0 ; CS OFF\r
+| | ;\r
+| | ; SBI PORTB,1 ; WE OFF\r
+| | ; LDI A,LATCH11_SAV ; RESTORE H ADDRESS\r
+| | ; OUT PORTA,A\r
+| | ; SBI PORTB,3\r
+| | ; CBI PORTB,3\r
+| | ;\r
+| | ; POP XH\r
+| | ; POP XL\r
+| | ; POP YL\r
+| | ; SEI\r
+| | ; RET\r
+| | \r
+| | FIND_BIT:\r
+| 0005F1 E3CC | LDI YL,LOW(LINE_FLAGS)\r
+| 0005F2 E0D1 | LDI YH,HIGH(LINE_FLAGS)\r
+| | ; LET'S BE SAFE\r
+| 0005F3 771F | ANDI A,$7F\r
+| 0005F4 2F21 | MOV B,A\r
+| 0005F5 9526 | LSR B\r
+| 0005F6 9526 | LSR B\r
+| 0005F7 9526 | LSR B\r
+| 0005F8 0FC2 | ADD YL,B\r
+| 0005F9 E020 | LDI B,0\r
+| 0005FA 1FD2 | ADC YH,B\r
+| 0005FB E021 | LDI B,1\r
+| 0005FC 7017 | ANDI A,7\r
+| 0005FD F019 | BREQ FIND_BIT_RET\r
+| | FIND_BIT_LOOP:\r
+| 0005FE 0F22 | LSL B\r
+| 0005FF 951A | DEC A\r
+| 000600 F7E9 | BRNE FIND_BIT_LOOP\r
+| | FIND_BIT_RET:\r
+| 000601 9508 | RET\r
+| | \r
+| | GO_READ_BYTE:\r
+| 000602 C554 | RJMP READ_BYTE\r
+| | \r
+| | GO_WRITE_BYTE:\r
+| 000603 C56F | RJMP WRITE_BYTE\r
+| | \r
+| | GO_CLEAR_BYTES:\r
+| 000604 C54C | RJMP CLEAR_BYTES\r
+| | \r
+| | GO_SELECT_XPAGE:\r
+| 000605 C587 | RJMP SELECT_XPAGE\r
+| | \r
+| | GO_SCROLL_REGION:\r
+| 000606 C497 | RJMP SCROLL_REGION\r
+| | \r
+| | GO_MAIN_LOOP:\r
+| 000607 CB8D | RJMP MAIN_LOOP\r
+| | \r
+| | GO_EXT_INT0:\r
+| 000608 C1DF | RJMP EXT_INT0\r
+| | \r
+| | GO_EXT_INT1:\r
+| 000609 C1DF | RJMP EXT_INT1\r
+| | \r
+| | GO_TIM2_OVF:\r
+| 00060A C58F | RJMP TIM2_OVF\r
+| | \r
+| | GO_T1_OVERFLOW:\r
+| 00060B C1E6 | RJMP T1_OVERFLOW\r
+| | \r
+| | GO_T0_OVERFLOW:\r
+| 00060C C2C6 | RJMP T0_OVERFLOW\r
+| | \r
+| | DRAW_RECT:\r
+| 00060D 9478 | SEI\r
+| 00060E 9090 0153 | LDS LINE_CNT,RECT_Y\r
+| 000610 9160 0152 | LDS XPIXEL,RECT_X\r
+| 000612 D13A | RCALL CALCULATE_XBYTE\r
+| 000613 9360 0102 | STS XPIXEL_SAV,XPIXEL\r
+| 000615 92A0 0100 | STS XBYTE_SAV,XBYTE\r
+| 000617 9070 0155 | LDS Y_SIZE,RECT_YY\r
+| 000619 27CC | CLR YL\r
+| 00061A 2DD9 | MOV YH,LINE_CNT\r
+| 00061B 95D6 | LSR YH\r
+| 00061C 95C7 | ROR YL\r
+| 00061D 95D6 | LSR YH\r
+| 00061E 95C7 | ROR YL\r
+| 00061F 5ED0 | SUBI YH,HIGH(-DRAW_DSPRAM) ; DRAW INTO DRAWING BUFFER\r
+| 000620 E118 | LDI A,HIGH(DRAW_DSPRAM>>6)\r
+| 000621 D56B | RCALL SELECT_XPAGE\r
+| 000622 C007 | RJMP L03A3\r
+| 000623 5CC0 | L039A: SUBI YL,LOW(-$40)\r
+| 000624 4FDF | SBCI YH,HIGH(-$40)\r
+| 000625 9493 | INC LINE_CNT\r
+| 000626 9160 0102 | LDS XPIXEL,XPIXEL_SAV\r
+| 000628 90A0 0100 | LDS XBYTE,XBYTE_SAV\r
+| 00062A 2AAC | L03A3: OR XBYTE,YL\r
+| 00062B EF1F | LDI A,$FF\r
+| 00062C 9080 0154 | LDS X_SIZE,RECT_XX\r
+| 00062E E000 | LDI F,$00\r
+| 00062F 1680 | CP X_SIZE,F\r
+| 000630 F041 | BREQ L03B0\r
+| 000631 E008 | LDI F,$08\r
+| 000632 1680 | CP X_SIZE,F\r
+| 000633 F0B8 | BRLO L03C2\r
+| 000634 2366 | TST XPIXEL\r
+| 000635 F019 | BREQ L03B0\r
+| 000636 9516 | L03AD: LSR A\r
+| 000637 956A | DEC XPIXEL\r
+| 000638 F7E9 | BRNE L03AD\r
+| 000639 D13B | L03B0: RCALL WR_DISP_MEM\r
+| 00063A E008 | LDI F,$08\r
+| 00063B 9110 0102 | LDS A,XPIXEL_SAV\r
+| 00063D 1B01 | SUB F,A\r
+| 00063E 1A80 | SUB X_SIZE,F\r
+| 00063F 94A3 | INC XBYTE\r
+| 000640 EF1F | LDI A,$FF\r
+| 000641 E008 | L03B8: LDI F,$08\r
+| 000642 1680 | CP X_SIZE,F\r
+| 000643 F038 | BRLO L03C2\r
+| 000644 F0B1 | BREQ L03D2\r
+| 000645 D12F | RCALL WR_DISP_MEM\r
+| 000646 EF1F | LDI A,$FF\r
+| 000647 E008 | LDI F,$08\r
+| 000648 1A80 | SUB X_SIZE,F\r
+| 000649 94A3 | INC XBYTE\r
+| 00064A CFF6 | RJMP L03B8\r
+| 00064B 2088 | L03C2: TST X_SIZE\r
+| 00064C F079 | BREQ L03D3\r
+| 00064D 9516 | L03C4: LSR A\r
+| 00064E 948A | DEC X_SIZE\r
+| 00064F F7E9 | BRNE L03C4\r
+| 000650 9510 | COM A\r
+| 000651 2366 | TST XPIXEL\r
+| 000652 F041 | BREQ L03D2\r
+| 000653 2722 | CLR B\r
+| 000654 9516 | L03CB: LSR A\r
+| 000655 9527 | ROR B\r
+| 000656 956A | DEC XPIXEL\r
+| 000657 F7E1 | BRNE L03CB\r
+| 000658 D11C | RCALL WR_DISP_MEM\r
+| 000659 94A3 | INC XBYTE\r
+| 00065A 2F12 | MOV A,B\r
+| 00065B D119 | L03D2: RCALL WR_DISP_MEM\r
+| 00065C DF57 | L03D3: RCALL NICK_SUB1\r
+| 00065D 947A | DEC Y_SIZE\r
+| 00065E 2700 | CLR F\r
+| 00065F 1270 | CPSE Y_SIZE,F\r
+| 000660 CFC2 | RJMP L039A\r
+| 000661 9508 | NO_GO: RET\r
+| | \r
+| | FILLED_RECTNC:\r
+| 000662 9100 0158 | LDS F,RECTNC_XX\r
+| 000664 950A | DEC F\r
+| 000665 3002 | CPI F,2\r
+| 000666 F3D0 | BRLO NO_GO\r
+| 000667 9100 0159 | LDS F,RECTNC_YY\r
+| 000669 3003 | CPI F,3\r
+| 00066A F3B0 | BRLO NO_GO\r
+| | \r
+| 00066B 9100 0156 | LDS F,RECTNC_X\r
+| 00066D 9503 | INC F\r
+| 00066E 9300 0152 | STS RECT_X,F\r
+| 000670 9100 0157 | LDS F,RECTNC_Y\r
+| 000672 9300 0153 | STS RECT_Y,F\r
+| 000674 9080 0158 | LDS X_SIZE,RECTNC_XX\r
+| 000676 948A | DEC X_SIZE\r
+| 000677 948A | DEC X_SIZE\r
+| 000678 9280 0154 | STS RECT_XX,X_SIZE\r
+| 00067A E001 | LDI F,$01\r
+| 00067B 9300 0155 | STS RECT_YY,F\r
+| 00067D DF8F | RCALL DRAW_RECT\r
+| | \r
+| 00067E 9100 0156 | LDS F,RECTNC_X\r
+| 000680 9300 0152 | STS RECT_X,F\r
+| 000682 9080 0158 | LDS X_SIZE,RECTNC_XX\r
+| 000684 9280 0154 | STS RECT_XX,X_SIZE\r
+| 000686 C03A | RJMP FILLED_RECTNC_ENTRY\r
+| | \r
+| | DRAW_RECTNC:\r
+| 000687 9100 0158 | LDS F,RECTNC_XX\r
+| 000689 950A | DEC F\r
+| 00068A 3002 | CPI F,2\r
+| 00068B F2A8 | BRLO NO_GO\r
+| 00068C 9100 0159 | LDS F,RECTNC_YY\r
+| 00068E 3003 | CPI F,3\r
+| 00068F F288 | BRLO NO_GO\r
+| | \r
+| 000690 9100 0156 | LDS F,RECTNC_X\r
+| 000692 9503 | INC F\r
+| 000693 9300 0152 | STS RECT_X,F\r
+| 000695 9100 0157 | LDS F,RECTNC_Y\r
+| 000697 9300 0153 | STS RECT_Y,F\r
+| 000699 9080 0158 | LDS X_SIZE,RECTNC_XX\r
+| 00069B 948A | DEC X_SIZE\r
+| 00069C 948A | DEC X_SIZE\r
+| 00069D 9280 0154 | STS RECT_XX,X_SIZE\r
+| 00069F E001 | LDI F,$01\r
+| 0006A0 9300 0155 | STS RECT_YY,F\r
+| 0006A2 DF6A | RCALL DRAW_RECT\r
+| | \r
+| 0006A3 9100 0156 | LDS F,RECTNC_X\r
+| 0006A5 9300 0152 | STS RECT_X,F\r
+| 0006A7 9100 0157 | LDS F,RECTNC_Y\r
+| 0006A9 9503 | INC F\r
+| 0006AA 9300 0153 | STS RECT_Y,F\r
+| 0006AC 9070 0159 | LDS Y_SIZE,RECTNC_YY\r
+| 0006AE 947A | DEC Y_SIZE\r
+| 0006AF 947A | DEC Y_SIZE\r
+| 0006B0 9270 0155 | STS RECT_YY,Y_SIZE\r
+| 0006B2 E001 | LDI F,$01\r
+| 0006B3 9300 0154 | STS RECT_XX,F\r
+| 0006B5 DF57 | RCALL DRAW_RECT\r
+| | \r
+| 0006B6 9080 0158 | LDS X_SIZE,RECTNC_XX\r
+| 0006B8 9100 0156 | LDS F,RECTNC_X\r
+| 0006BA 0D08 | ADD F,X_SIZE\r
+| 0006BB 950A | DEC F\r
+| 0006BC 9300 0152 | STS RECT_X,F\r
+| 0006BE E001 | LDI F,$01\r
+| 0006BF 9300 0154 | STS RECT_XX,F\r
+| | FILLED_RECTNC_ENTRY:\r
+| 0006C1 9100 0157 | LDS F,RECTNC_Y\r
+| 0006C3 9503 | INC F\r
+| 0006C4 9300 0153 | STS RECT_Y,F\r
+| 0006C6 9070 0159 | LDS Y_SIZE,RECTNC_YY\r
+| 0006C8 947A | DEC Y_SIZE\r
+| 0006C9 947A | DEC Y_SIZE\r
+| 0006CA 9270 0155 | STS RECT_YY,Y_SIZE\r
+| 0006CC DF40 | RCALL DRAW_RECT\r
+| | \r
+| 0006CD 9100 0156 | LDS F,RECTNC_X\r
+| 0006CF 9503 | INC F\r
+| 0006D0 9300 0152 | STS RECT_X,F\r
+| 0006D2 9080 0158 | LDS X_SIZE,RECTNC_XX\r
+| 0006D4 948A | DEC X_SIZE\r
+| 0006D5 948A | DEC X_SIZE\r
+| 0006D6 9280 0154 | STS RECT_XX,X_SIZE\r
+| 0006D8 9070 0159 | LDS Y_SIZE,RECTNC_YY\r
+| 0006DA 9100 0157 | LDS F,RECTNC_Y\r
+| 0006DC 0D07 | ADD F,Y_SIZE\r
+| 0006DD 950A | DEC F\r
+| 0006DE 9300 0153 | STS RECT_Y,F\r
+| 0006E0 E001 | LDI F,$01\r
+| 0006E1 9300 0155 | STS RECT_YY,F\r
+| 0006E3 CF29 | RJMP DRAW_RECT\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | TX_EMPTY:\r
+| 0006E4 > MTX_EMPTY\r
+| 0006E4 B61F > IN SR,SREG\r
+| 0006E5 930F > PUSH F\r
+| > \r
+| 0006E6 ED0F > LDI F,-API_TIMEOUT ; FEED TX/RX WATCHDOG\r
+| 0006E7 2EC0 > MOV API_WATCHDOG,F\r
+| > \r
+| 0006E8 93EF > PUSH ZL\r
+| 0006E9 93FF > PUSH ZH\r
+| 0006EA 2DE4 > MOV ZL,TX_PTR\r
+| 0006EB 5AE0 > SUBI ZL,-TX_BUF\r
+| 0006EC 27FF > CLR ZH\r
+| 0006ED 8100 > LD F,Z ; GET CHARACTER FROM TX BUFFER\r
+| 0006EE 91FF > POP ZH\r
+| 0006EF 91EF > POP ZL\r
+| > \r
+| 0006F0 B90C > OUT UDR,F\r
+| > \r
+| 0006F1 945A > DEC TX_COUNT\r
+| 0006F2 9443 > INC TX_PTR\r
+| 0006F3 E10F > LDI F,TX_SIZE-1\r
+| 0006F4 2240 > AND TX_PTR,F\r
+| > \r
+| 0006F5 946A > DEC API_REMAIN ; MORE TO SEND?\r
+| 0006F6 F00A > BRMI GO_API_DONE1 ; YES, AWAIT NEXT TX EMPTY INTERRUPT\r
+| 0006F7 C04C > RJMP API_REINIT ; NO, AWAIT NEXT DATA SIZE COMMAND\r
+| > GO_API_DONE1:\r
+| 0006F8 C051 > RJMP API_DONE\r
+| | RX_COMPLETE:\r
+| 0006F9 > MRX_COMPLETE\r
+| 0006F9 B61F > IN SR,SREG\r
+| 0006FA 930F > PUSH F\r
+| > \r
+| 0006FB ED0F > LDI F,-API_TIMEOUT ; FEED TX/RX WATCHDOG\r
+| 0006FC 2EC0 > MOV API_WATCHDOG,F\r
+| > \r
+| 0006FD B10C > IN F,UDR\r
+| 0006FE 995C > SBIC USR,FE ; BREAK DETECTED?\r
+| 0006FF C03E > RJMP API_FRAMING_ERROR\r
+| > \r
+| 000700 FCE7 > SBRC API_STATE,APIDATA\r
+| 000701 C02C > RJMP API_RX_DATA ; WITH F = CHARACTER\r
+| 000702 FCE6 > SBRC API_STATE,APISIZE\r
+| 000703 C00E > RJMP API_DATA_SIZE ; WITH F = CHARACTER\r
+| > \r
+| > ; RECEIVED 4800 BPS ADDRESS COMMAND\r
+| 000704 3002 > CPI F,API_ADDRESS ; CHARACTER = MY ADDRESS?\r
+| 000705 F431 > BRNE API_ADDRESS_DONE\r
+| > \r
+| 000706 E003 > LDI F,API_RATE_FAST ; 115200 BPS\r
+| 000707 B909 > OUT UBRR,F ; SET UART RATE\r
+| > \r
+| 000708 9A53 > SBI UCR,TXEN ; ENABLE UART TX AND TXD PIN\r
+| > \r
+| 000709 E400 > LDI F,1<<APISIZE\r
+| 00070A 2AE0 > OR API_STATE,F ; SAY WE ARE EXPECTING DATA SIZE CMD\r
+| 00070B C03E > RJMP API_DONE\r
+| > \r
+| > API_ADDRESS_DONE:\r
+| 00070C 3A0A > CPI F,$AA ; CHARACTER = TURNON COMMAND?\r
+| 00070D F419 > BRNE API_TURNON_DONE\r
+| 00070E E000 > LDI F,0\r
+| 00070F 9300 016A > STS TURNON_COUNT,F ; REQUEST IMMEDIATE TURNON\r
+| > API_TURNON_DONE:\r
+| > ; 18DEC01 RESTORED IT TO NORMAL FOR HYT1500 RELEASE\r
+| > ; CPI F,9 ; REALLY A VALID ADDRESS COMMAND?\r
+| > ; BRLO API_BAD_DONE ; YES, ALL IS OK (IT WAS SOMEONE ELSE)\r
+| > ; PUSH ZL ; NO, WARN THAT THE BUS HAS ERRORS\r
+| > ; PUSH ZH\r
+| > ; MOV ZL,RX_COUNT\r
+| > ; CPI ZL,RX_SIZE\r
+| > ; BRSH API_BAD_SKIP\r
+| > ; ADD ZL,RX_PTR\r
+| > ; ANDI ZL,RX_SIZE-1\r
+| > ; SUBI ZL,-RX_BUF\r
+| > ; CLR ZH\r
+| > ; LDI F,'*' ; DIAGNOSTIC INDICATOR FOR BAD COMMAND\r
+| > ; ST Z,F ; SAVE CHARACTER IN RX BUFFER\r
+| > ; INC RX_COUNT\r
+| > ;API_BAD_SKIP:\r
+| > ; POP ZH\r
+| > ; POP ZL\r
+| > ;API_BAD_DONE:\r
+| 000711 C038 > RJMP API_DONE\r
+| > \r
+| > API_DATA_SIZE:\r
+| > ; RECEIVED DATA SIZE COMMAND\r
+| 000712 2E60 > MOV API_REMAIN,F\r
+| > \r
+| 000713 E800 > LDI F,RX_SIZE\r
+| 000714 1903 > SUB F,RX_COUNT ; F = AVAILABLE RX BUFFER\r
+| 000715 F40A > BRPL RX_RESPOND_F\r
+| 000716 E70F > LDI F,$7F ; F = MAXIMUM POSSIBLE TRANSFER COUNT\r
+| > \r
+| > RX_RESPOND_F:\r
+| 000717 2066 > TST API_REMAIN ; TEST TRANSFER DIRECTION\r
+| 000718 F412 > BRPL RX_RESPOND ; USE F IF WE NEED TO RECEIVE\r
+| > \r
+| 000719 2D05 > MOV F,TX_COUNT\r
+| 00071A 6800 > ORI F,$80 ; F = QUEUED TX CHARACTERS\r
+| > \r
+| > RX_RESPOND:\r
+| > ; SEND DATA SIZE RESPONSE\r
+| > ; API_REMAIN = HOST MAX, F = OUR MAX\r
+| 00071B B90C > OUT UDR,F ; SEND DATA SIZE RESPONSE\r
+| > \r
+| 00071C 1506 > CP F,API_REMAIN\r
+| 00071D F408 > BRSH RX_RESPOND_OK\r
+| 00071E 2E60 > MOV API_REMAIN,F ; API_REMAIN = LESSER OUR / HOST MAX\r
+| > \r
+| > RX_RESPOND_OK:\r
+| 00071F 2D06 > MOV F,API_REMAIN\r
+| 000720 770F > ANDI F,$7F ; NULL REQUEST?\r
+| 000721 F039 > BREQ API_NULL ; YES, REVERT TO 4800 WHEN TX COMPLETE\r
+| > ; NO, AWAIT RX COMPLETE / TX EMPTY INT\r
+| 000722 EC00 > LDI F,1<<APIDATA | 1<<APISIZE\r
+| 000723 2AE0 > OR API_STATE,F ; WE ARE EXPECTING TO TRANSFER DATA\r
+| > \r
+| 000724 946A > DEC API_REMAIN ; NUDGE FOR BRPL / BRMI ALGORITHM\r
+| 000725 F522 > BRPL API_DONE ; WE WILL RECEIVE, NO FURTHER ACTION\r
+| > \r
+| 000726 9857 > CBI UCR,RXCIE ; DISABLE UART RX COMPLETE INTERRUPT\r
+| 000727 9A55 > SBI UCR,UDRIE ; ENABLE UART DATA REGISTER EMPTY INT\r
+| 000728 C021 > RJMP API_DONE\r
+| > \r
+| > API_NULL:\r
+| 000729 EB0F > LDI F,~(1<<APISIZE)\r
+| 00072A 22E0 > AND API_STATE,F ; IN CASE NO DATA TRANSFERRED\r
+| > \r
+| 00072B 9A56 > SBI UCR,TXCIE ; ENABLE UART TX COMPLETE INTERRUPT\r
+| 00072C 9A5E > SBI USR,TXC ; CLEAR UART TX COMPLETE PENDING BIT\r
+| 00072D C01C > RJMP API_DONE\r
+| > \r
+| > API_RX_DATA:\r
+| > ; RECEIVED DATA BYTE, SAVE IT\r
+| > ; OUT UDR,API_REMAIN\r
+| > \r
+| 00072E 93EF > PUSH ZL\r
+| 00072F 93FF > PUSH ZH\r
+| 000730 2DE3 > MOV ZL,RX_COUNT\r
+| 000731 0DE2 > ADD ZL,RX_PTR\r
+| 000732 77EF > ANDI ZL,RX_SIZE-1\r
+| 000733 58E0 > SUBI ZL,-RX_BUF\r
+| 000734 27FF > CLR ZH\r
+| 000735 8300 > ST Z,F ; SAVE CHARACTER IN RX BUFFER\r
+| 000736 91FF > POP ZH\r
+| 000737 91EF > POP ZL\r
+| > \r
+| 000738 9433 > INC RX_COUNT\r
+| > \r
+| 000739 946A > DEC API_REMAIN ; MORE TO RECEIVE?\r
+| 00073A F47A > BRPL API_DONE ; YES, AWAIT NEXT RX COMPLETE INTERRUPT\r
+| 00073B C00C > RJMP API_REVERT ; NO, AWAIT NEXT DATA SIZE COMMAND\r
+| | ;FEED_WDOG:\r
+| | ; MFEED_WDOG\r
+| | TX_COMPLETE:\r
+| 00073C > MTX_COMPLETE\r
+| 00073C B61F > IN SR,SREG\r
+| | API_TIMEOUT_ERROR:\r
+| 00073D > MAPI_TIMEOUT_ERROR\r
+| 00073D 930F > PUSH F\r
+| | API_FRAMING_ERROR:\r
+| | API_RESET_ERROR:\r
+| 00073E > MAPI_FRAMING_ERROR\r
+| 00073E 9853 > CBI UCR,TXEN ; DISABLE UART TX AND TXD PIN\r
+| 00073F E50F > LDI F,API_RATE_SLOW ; 4800 BPS IF EXPECTING ADDRESS COMMAND\r
+| 000740 B909 > OUT UBRR,F ; SET UART RATE\r
+| > \r
+| 000741 EB0F > LDI F,~(1<<APISIZE)\r
+| 000742 22E0 > AND API_STATE,F ; EXPECTING ADDRESS COMMAND\r
+| 000743 24CC > CLR API_WATCHDOG ; NO ACTION, JUST WAIT TO RECEIVE ADDR\r
+| | API_REINIT:\r
+| 000744 > MAPI_REINIT\r
+| 000744 9855 > CBI UCR,UDRIE ; DISABLE UART TX EMPTY INTERRUPT\r
+| 000745 9856 > CBI UCR,TXCIE ; DISABLE UART TX COMPLETE INTERRRUPT\r
+| 000746 9A57 > SBI UCR,RXCIE ; ENABLE UART RX COMPLETE INTERRUPT\r
+| 000747 B10C > IN F,UDR ; CLEAR UART RX COMPLETE PENDING BIT\r
+| | API_REVERT:\r
+| 000748 > MAPI_REVERT\r
+| 000748 E70F > LDI F,~(1<<APIDATA)\r
+| 000749 22E0 > AND API_STATE,F ; EXPECTING ADDRESS / DATA SIZE COMMAND\r
+| | API_DONE:\r
+| 00074A > MAPI_DONE\r
+| 00074A 910F > POP F\r
+| 00074B BE1F > OUT SREG,SR\r
+| 00074C 9518 > RETI\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | CALCULATE_XBYTE:\r
+| 00074D 24AA | CLR XBYTE\r
+| 00074E EF00 | LDI F,$F0\r
+| 00074F 1AA0 | SUB XBYTE,F\r
+| 000750 FF67 | SBRS XPIXEL,7\r
+| 000751 24AA | CLR XBYTE\r
+| 000752 776F | ANDI XPIXEL,$7F\r
+| 000753 5068 | L0415: SUBI XPIXEL,$08\r
+| 000754 F014 | BRLT L0419\r
+| 000755 94A3 | INC XBYTE\r
+| 000756 CFFC | RJMP L0415\r
+| 000757 5F68 | L0419: SUBI XPIXEL,$F8\r
+| 000758 9508 | RET\r
+| | \r
+| 000759 > LPMS: A0_A13 YL,YH\r
+| 000759 2F3C > MOV R19,YL\r
+| 00075A 733F > ANDI R19,$3F\r
+| 00075B BB35 > OUT PORTC,R19\r
+| > \r
+| 00075C 2F3D > MOV R19,YH\r
+| 00075D 0F33 > LSL R19\r
+| 00075E 0F33 > LSL R19\r
+| 00075F FBC7 > BST YL,7 ; A7\r
+| 000760 F931 > BLD R19,1\r
+| 000761 FBC6 > BST YL,6 ; A6\r
+| 000762 F930 > BLD R19,0\r
+| 000763 BB3B > OUT PORTA,R19\r
+| 000764 94F8 > CLI\r
+| 000765 9AC3 > SBI PORTB,3\r
+| 000766 98C3 > CBI PORTB,3\r
+| 000767 9478 > SEI\r
+| 000768 9330 0118 > STS LATCH11_SAV,R19\r
+| 00076A > RAMRD R0\r
+| 00076A 2700 > CLR F\r
+| 00076B BB0A > OUT DDRA,F ; PORTA INPUT\r
+| 00076C 94F8 > CLI\r
+| 00076D 98C0 > CBI PORTB,0 ; CS_ON\r
+| 00076E 0000 > NOP\r
+| 00076F 9AC0 > SBI PORTB,0 ; CS_OFF\r
+| 000770 B209 > IN R0,PINA ; READ DATA\r
+| 000771 9478 > SEI\r
+| 000772 EF0F > LDI F,$FF\r
+| 000773 BB0A > OUT DDRA,F ; PORTA OUTPUT\r
+| 000774 9508 | RET ;RETI\r
+| | \r
+| | WR_DISP_MEM:\r
+| 000775 > A0_A13 XBYTE,YH\r
+| 000775 2D3A > MOV R19,XBYTE\r
+| 000776 733F > ANDI R19,$3F\r
+| 000777 BB35 > OUT PORTC,R19\r
+| > \r
+| 000778 2F3D > MOV R19,YH\r
+| 000779 0F33 > LSL R19\r
+| 00077A 0F33 > LSL R19\r
+| 00077B FAA7 > BST XBYTE,7 ; A7\r
+| 00077C F931 > BLD R19,1\r
+| 00077D FAA6 > BST XBYTE,6 ; A6\r
+| 00077E F930 > BLD R19,0\r
+| 00077F BB3B > OUT PORTA,R19\r
+| 000780 94F8 > CLI\r
+| 000781 9AC3 > SBI PORTB,3\r
+| 000782 98C3 > CBI PORTB,3\r
+| 000783 9478 > SEI\r
+| 000784 9330 0118 > STS LATCH11_SAV,R19\r
+| 000786 > RAMRD W\r
+| 000786 2700 > CLR F\r
+| 000787 BB0A > OUT DDRA,F ; PORTA INPUT\r
+| 000788 94F8 > CLI\r
+| 000789 98C0 > CBI PORTB,0 ; CS_ON\r
+| 00078A 0000 > NOP\r
+| 00078B 9AC0 > SBI PORTB,0 ; CS_OFF\r
+| 00078C B2F9 > IN W,PINA ; READ DATA\r
+| 00078D 9478 > SEI\r
+| 00078E EF0F > LDI F,$FF\r
+| 00078F BB0A > OUT DDRA,F ; PORTA OUTPUT\r
+| 000790 FEB1 | SBRS FLAGS,1\r
+| 000791 C003 | RJMP L043E\r
+| 000792 9510 | COM A\r
+| 000793 22F1 | AND W,A\r
+| 000794 C003 | RJMP L0441\r
+| 000795 26F1 | L043E: EOR W,A\r
+| 000796 FCB0 | SBRC FLAGS,0\r
+| 000797 2AF1 | OR W,A\r
+| 000798 > L0441: A0_A13 XBYTE,YH\r
+| 000798 2D3A > MOV R19,XBYTE\r
+| 000799 733F > ANDI R19,$3F\r
+| 00079A BB35 > OUT PORTC,R19\r
+| > \r
+| 00079B 2F3D > MOV R19,YH\r
+| 00079C 0F33 > LSL R19\r
+| 00079D 0F33 > LSL R19\r
+| 00079E FAA7 > BST XBYTE,7 ; A7\r
+| 00079F F931 > BLD R19,1\r
+| 0007A0 FAA6 > BST XBYTE,6 ; A6\r
+| 0007A1 F930 > BLD R19,0\r
+| 0007A2 BB3B > OUT PORTA,R19\r
+| 0007A3 94F8 > CLI\r
+| 0007A4 9AC3 > SBI PORTB,3\r
+| 0007A5 98C3 > CBI PORTB,3\r
+| 0007A6 9478 > SEI\r
+| 0007A7 9330 0118 > STS LATCH11_SAV,R19\r
+| 0007A9 > RAMWR W\r
+| 0007A9 BAFB > OUT PORTA,W\r
+| 0007AA 94F8 > CLI\r
+| 0007AB 98C1 > CBI PORTB,1\r
+| 0007AC 98C0 > CBI PORTB,0\r
+| 0007AD 0000 > NOP\r
+| 0007AE 9AC0 > SBI PORTB,0\r
+| 0007AF 9478 > SEI\r
+| 0007B0 9AC1 > SBI PORTB,1\r
+| 0007B1 9508 | RET ;RETI\r
+| | \r
+| | CLEAR_DISPLAY:\r
+| 0007B2 2777 | CLR CURSORX ; HOME CURSOR\r
+| 0007B3 2788 | CLR CURSORY\r
+| 0007B4 2499 | CLR LINE_CNT\r
+| 0007B5 E0C0 | LDI YL,LOW(DRAW_DSPRAM)\r
+| 0007B6 E2D0 | LDI YH,HIGH(DRAW_DSPRAM)\r
+| 0007B7 E118 | LDI A,HIGH(DRAW_DSPRAM>>6)\r
+| 0007B8 D3D4 | RCALL SELECT_XPAGE\r
+| | CLEAR_DISPLAY_LOOP:\r
+| 0007B9 24AA | CLR XBYTE\r
+| 0007BA 92A0 0100 | STS XBYTE_SAV,XBYTE\r
+| 0007BC 9110 0100 | L065C: LDS A,XBYTE_SAV\r
+| 0007BE 2B1C | OR A,YL\r
+| 0007BF > A0_A13 A,YH\r
+| 0007BF 2F31 > MOV R19,A\r
+| 0007C0 733F > ANDI R19,$3F\r
+| 0007C1 BB35 > OUT PORTC,R19\r
+| > \r
+| 0007C2 2F3D > MOV R19,YH\r
+| 0007C3 0F33 > LSL R19\r
+| 0007C4 0F33 > LSL R19\r
+| 0007C5 FB17 > BST A,7 ; A7\r
+| 0007C6 F931 > BLD R19,1\r
+| 0007C7 FB16 > BST A,6 ; A6\r
+| 0007C8 F930 > BLD R19,0\r
+| 0007C9 BB3B > OUT PORTA,R19\r
+| 0007CA 94F8 > CLI\r
+| 0007CB 9AC3 > SBI PORTB,3\r
+| 0007CC 98C3 > CBI PORTB,3\r
+| 0007CD 9478 > SEI\r
+| 0007CE 9330 0118 > STS LATCH11_SAV,R19\r
+| 0007D0 E000 | LDI F,$00\r
+| 0007D1 > RAMWR F\r
+| 0007D1 BB0B > OUT PORTA,F\r
+| 0007D2 94F8 > CLI\r
+| 0007D3 98C1 > CBI PORTB,1\r
+| 0007D4 98C0 > CBI PORTB,0\r
+| 0007D5 0000 > NOP\r
+| 0007D6 9AC0 > SBI PORTB,0\r
+| 0007D7 9478 > SEI\r
+| 0007D8 9AC1 > SBI PORTB,1\r
+| 0007D9 94A3 | INC XBYTE\r
+| 0007DA E200 | LDI F,$20\r
+| 0007DB 16A0 | CP XBYTE,F\r
+| 0007DC F019 | BREQ L0674\r
+| 0007DD 92A0 0100 | STS XBYTE_SAV,XBYTE\r
+| 0007DF CFDC | RJMP L065C\r
+| 0007E0 DDD3 | L0674: RCALL NICK_SUB1\r
+| 0007E1 9493 | INC LINE_CNT\r
+| 0007E2 5CC0 | SUBI YL,LOW(-$40)\r
+| 0007E3 4FDF | SBCI YH,HIGH(-$40)\r
+| 0007E4 34D0 | CPI YH,HIGH(DRAW_DSPRAM+DISPLAY_LINES*$40)\r
+| 0007E5 > RJNE CLEAR_DISPLAY_LOOP\r
+| 0007E5 F009 > BREQ LOCAL\r
+| 0007E6 CFD2 > RJMP CLEAR_DISPLAY_LOOP\r
+| > LOCAL:\r
+| 0007E7 9508 | RET\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | EXT_INT0:\r
+| | ;**:\r
+| 0007E8 9518 | RETI\r
+| | ;** IN SR,SREG ; MEASURE VCC\r
+| | ;** SBI DDRD,2\r
+| | ;** IN C,TCNT1L\r
+| | ;** IN D,TCNT1H\r
+| | ;** STS VCCH,D\r
+| | ;** STS VCCL,C\r
+| | ;** RJMP EXT_INT_RET\r
+| | \r
+| | EXT_INT1:\r
+| 0007E9 B61F | IN SR,SREG ; MEASURE TEMPERATURE\r
+| 0007EA 9A8B | SBI DDRD,3\r
+| 0007EB B54C | IN C,TCNT1L\r
+| 0007EC B55D | IN D,TCNT1H\r
+| 0007ED 9350 0109 | STS TMPH,D\r
+| 0007EF 9340 0108 | STS TMPL,C\r
+| 0007F1 C114 | RJMP EXT_INT_RET\r
+| | \r
+| | T1_OVERFLOW:\r
+| 0007F2 B61F | IN SR,SREG\r
+| 0007F3 B35A | IN D,DDRA ; SAVE STATE OF THE WORLD\r
+| 0007F4 935F | PUSH D\r
+| 0007F5 B35B | IN D,PORTA\r
+| 0007F6 935F | PUSH D\r
+| 0007F7 B355 | IN D,PORTC\r
+| 0007F8 935F | PUSH D\r
+| 0007F9 9150 0118 | LDS D,LATCH11_SAV\r
+| 0007FB 935F | PUSH D\r
+| | \r
+| 0007FC EF5F | LDI D,$FF\r
+| 0007FD BB5A | OUT DDRA,D ; PORTA OUTPUT\r
+| | \r
+| 0007FE E750 | LDI D,$70 ; FORCE DUMMY COMPARE MATCH\r
+| 0007FF BD5F | OUT TCCR1A,D ; TO SET OC1B, TOGGLE OC1A\r
+| 000800 B54C | IN C,TCNT1L ; (FOR REV E PARTS)\r
+| 000801 B55D | IN D,TCNT1H ; READ CURRENT COUNT\r
+| 000802 5F48 | SUBI C,LOW(-8) ; ADD JUST ENOUGH TIME\r
+| 000803 4F5F | SBCI D,HIGH(-8) ; FOR THESE INSTRUCTIONS\r
+| 000804 BD5B | OUT OCR1AH,D ; AND WRITE TO COMPARE REGISTERS\r
+| 000805 BD4A | OUT OCR1AL,C\r
+| 000806 BD59 | OUT OCR1BH,D\r
+| 000807 BD48 | OUT OCR1BL,C\r
+| | \r
+| 000808 9140 014C | LDS C,CLOCKING_PTR\r
+| | ; TST C ; START OF 4 LINE BLOCK? (1 BASED)\r
+| 00080A 9150 014D | lds d,CLOCKING_PTR+1\r
+| 00080C 7051 | andi d,1\r
+| 00080D 2B45 | or c,d ; checks for start of an 8 line block\r
+| | ; rjmp BREAK0 ; temporary (prevents switching off via power switch)\r
+| 00080E F449 | BRNE BREAK0 ; NO, BREAK COUNTER IS OK FOR NOW\r
+| | \r
+| 00080F 9150 016B | LDS D,BREAK_COUNT\r
+| 000811 9553 | INC D ; HAD BREAK SOLIDLY FOR TIMEOUT?\r
+| 000812 9350 016B | STS BREAK_COUNT,D\r
+| 000814 F451 | BRNE BREAK1 ; NO, CLOCK OUT TO DISPLAY AS NORMAL\r
+| 000815 EB5F | LDI D,~(1<<6)\r
+| 000816 22B5 | AND FLAGS,D ; SAY WE TURNED OFF VIA BREAK DETECTION\r
+| | GO_SLEEP_ENTRY:\r
+| 000817 C92D | RJMP SLEEP_ENTRY\r
+| | \r
+| 000818 0000 | BREAK0: NOP\r
+| 000819 0000 | NOP\r
+| 00081A 0000 | NOP\r
+| 00081B 0000 | NOP\r
+| 00081C 0000 | NOP\r
+| 00081D 0000 | NOP\r
+| 00081E 0000 | NOP\r
+| 00081F 9A8B | BREAK1: SBI DDRD,3 ; PRECHARGE TEMPERATURE MEASUREMENT\r
+| 000820 9A93 | SBI PORTD,3\r
+| | \r
+| 000821 2755 | CLR D\r
+| 000822 BD5E | OUT TCCR1B,D ; STOP TIMER1\r
+| 000823 BD5D | OUT TCNT1H,D ; AND CLEAR COUNT\r
+| 000824 BD5C | OUT TCNT1L,D\r
+| | \r
+| 000825 9150 014D | LDS D,CLOCKING_PTR+1\r
+| 000827 2B54 | OR D,C ; START OF FRAME? (REALLY LINE 1)\r
+| 000828 F071 | BREQ L04E6 ; YES, GO AND TOGGLE M ETC\r
+| | \r
+| 000829 9150 0117 | LDS D,LATCH10_SAV\r
+| 00082B BB5B | OUT PORTA,D\r
+| 00082C 9AC4 | SBI PORTB,4\r
+| 00082D 9ADD | SBI PORTA,5 ; PULSE CL1\r
+| 00082E 98DD | CBI PORTA,5\r
+| 00082F 98C4 | CBI PORTB,4\r
+| 000830 0000 | NOP ; EQUALIZE DELAY\r
+| 000831 0000 | NOP\r
+| 000832 0000 | NOP\r
+| 000833 0000 | NOP\r
+| 000834 0000 | NOP\r
+| 000835 0000 | NOP\r
+| 000836 C00E | RJMP L04F9\r
+| | \r
+| 000837 9150 0117 | L04E6: LDS D,LATCH10_SAV\r
+| 000839 6850 | ORI D,$80 ; RAISE FLM\r
+| 00083A 6250 | ORI D,$20 ; RAISE CL1\r
+| 00083B BB5B | OUT PORTA,D\r
+| | \r
+| 00083C 9AC4 | SBI PORTB,4\r
+| 00083D E640 | LDI C,$60 ; TOGGLE M AND CL1\r
+| 00083E 2754 | EOR D,C\r
+| 00083F BB5B | OUT PORTA,D\r
+| 000840 775F | ANDI D,$7F ; DROP FLM\r
+| 000841 BB5B | OUT PORTA,D\r
+| 000842 98C4 | CBI PORTB,4\r
+| 000843 9350 0117 | STS LATCH10_SAV,D\r
+| | \r
+| 000845 9150 0117 | L04F9: LDS D,LATCH10_SAV ; SAVE STATE\r
+| 000847 935F | PUSH D\r
+| | \r
+| 000848 93EF | PUSH ZL\r
+| 000849 93FF | PUSH ZH\r
+| 00084A 91E0 014C | LDS ZL,CLOCKING_PTR\r
+| 00084C 91F0 014D | LDS ZH,CLOCKING_PTR+1\r
+| | \r
+| 00084E 5CE0 | SUBI ZL,LOW(-$40)\r
+| 00084F 4FFF | SBCI ZH,HIGH(-$40)\r
+| 000850 71FF | ANDI ZH,HIGH(DISPLAY_LINES*$40-1)\r
+| | \r
+| 000851 > A0_A15 ZL,ZH\r
+| 000851 933F > PUSH R19\r
+| > \r
+| 000852 2F3E > MOV R19,ZL\r
+| 000853 733F > ANDI R19,$3F\r
+| 000854 BB35 > OUT PORTC,R19\r
+| > \r
+| 000855 2F3F > MOV R19,ZH\r
+| 000856 0F33 > LSL R19\r
+| 000857 0F33 > LSL R19\r
+| 000858 FBE7 > BST ZL,7 ; A7\r
+| 000859 F931 > BLD R19,1\r
+| 00085A FBE6 > BST ZL,6 ; A6\r
+| 00085B F930 > BLD R19,0\r
+| 00085C BB3B > OUT PORTA,R19\r
+| 00085D 9AC3 > SBI PORTB,3\r
+| 00085E 98C3 > CBI PORTB,3\r
+| 00085F 93F0 0118 > STS LATCH11_SAV,ZH\r
+| > \r
+| 000861 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 000863 FBF7 > BST ZH,7 ; A15\r
+| 000864 F931 > BLD R19,1\r
+| 000865 FBF6 > BST ZH,6 ; A14\r
+| 000866 F930 > BLD R19,0\r
+| 000867 BB3B > OUT PORTA,R19\r
+| 000868 9AC4 > SBI PORTB,4\r
+| 000869 98C4 > CBI PORTB,4\r
+| 00086A 9330 0117 > STS LATCH10_SAV,R19\r
+| > \r
+| 00086C 913F > POP R19\r
+| | \r
+| 00086D 98C1 | CBI PORTB,1 ; CLR HC590\r
+| 00086E 9AC1 | SBI PORTB,1\r
+| 00086F 9897 | CBI PORTD,7 ; DROP OE FOR HC590\r
+| 000870 2744 | CLR C\r
+| 000871 BB4A | OUT DDRA,C ; PORTA HI Z\r
+| 000872 EC40 | LDI C,$C0\r
+| 000873 BB44 | OUT DDRC,C ; PORTC HI Z\r
+| 000874 98C0 | CBI PORTB,0 ; DROP CS FOR DSPRAM\r
+| | \r
+| 000875 2755 | CLR D\r
+| 000876 BD5B | OUT OCR1AH,D\r
+| | \r
+| | ; LDI D,1 ; TO CLOCK AT 5.5/2 MHZ\r
+| 000877 BD5A | OUT OCR1AL,D ; TO CLOCK AT 7.3/2 MHZ\r
+| 000878 E059 | LDI D,$09\r
+| 000879 BD5E | OUT TCCR1B,D ; START CL2 CLOCKING WITH CLR ON MATCH\r
+| | \r
+| 00087A 93E0 014C | STS CLOCKING_PTR,ZL\r
+| 00087C 93F0 014D | STS CLOCKING_PTR+1,ZH\r
+| 00087E 91FF | POP ZH\r
+| 00087F 91EF | POP ZL\r
+| | \r
+| | ;!!! LDI D,$7A ; WAIT FOR 32uSEC\r
+| | ; LDI D,58 ;$7A ; WAIT FOR 32uSEC GOOD\r
+| 000880 E35C | LDI D,60 ; WAIT FOR 32uSEC\r
+| | ; LDI D,61 ;$7A ; WAIT FOR 32uSEC\r
+| | ; LDI D,62 ;$7A ; WAIT FOR 32uSEC GOOD\r
+| | \r
+| 000881 955A | L050E: DEC D\r
+| 000882 F7F1 | BRNE L050E\r
+| | \r
+| 000883 9AC0 | SBI PORTB,0 ; RAISE CS FOR DSPRAM\r
+| 000884 EF5F | LDI D,$FF\r
+| 000885 BB5A | OUT DDRA,D ; PORTA OUTPUT\r
+| 000886 9A97 | SBI PORTD,7 ; RAISE OE FOR HC590\r
+| 000887 BB54 | OUT DDRC,D ; PORTC OUTPUT\r
+| | \r
+| 000888 988D | CBI DDRD,5 ; CL2 INPUT TO MEASURE VEE\r
+| 000889 9895 | CBI PORTD,5 ; REMOVE PULL UP\r
+| | \r
+| 00088A E051 | LDI D,$01 ; KILL CLR ON COMPARE MATCH\r
+| 00088B 0000 | NOP ; !WITH OC1A LEFT IN LOW STATE\r
+| 00088C BD5E | OUT TCCR1B,D\r
+| | \r
+| 00088D E05B | LDI D,$0B ; WAIT FOR 3uSEC\r
+| | SETTLE_CL2:\r
+| 00088E 955A | DEC D\r
+| 00088F F7F1 | BRNE SETTLE_CL2\r
+| | \r
+| 000890 9150 010D | LDS D,VEEH\r
+| 000892 9140 010C | LDS C,VEEL\r
+| 000894 9A8D | SBI DDRD,5 ; CL2 LOW OUTPUT\r
+| 000895 9985 | SBIC PIND,5 ; SAMPLE CL2 JUST BEFORE CHANGE\r
+| 000896 C007 | RJMP L052F\r
+| | \r
+| 000897 334A | CPI C,LOW(VEE_MIN)\r
+| 000898 EF9D | LDI E,HIGH(VEE_MIN)\r
+| 000899 0759 | CPC D,E\r
+| 00089A F052 | BRMI L0535\r
+| | \r
+| 00089B 5041 | SUBI C,$01\r
+| 00089C 4050 | SBCI D,$00\r
+| 00089D C00B | RJMP L0536\r
+| | \r
+| 00089E 3D45 | L052F: CPI C,LOW(VEE_MAX)\r
+| 00089F EF9F | LDI E,HIGH(VEE_MAX)\r
+| 0008A0 0759 | CPC D,E\r
+| 0008A1 F41A | BRPL L0535\r
+| | \r
+| 0008A2 5F4F | SUBI C,$FF\r
+| 0008A3 4F5F | SBCI D,$FF\r
+| 0008A4 C004 | RJMP L0536\r
+| | \r
+| 0008A5 0000 | L0535: NOP ; EQUALIZE DELAYS\r
+| 0008A6 0000 | NOP\r
+| 0008A7 0000 | NOP\r
+| 0008A8 0000 | NOP\r
+| 0008A9 9350 010D | L0536: STS VEEH,D\r
+| 0008AB 9340 010C | STS VEEL,C\r
+| 0008AD BD5B | OUT OCR1AH,D ; SET SWITCHING TIME FOR VEE MEASURE\r
+| 0008AE BD4A | OUT OCR1AL,C\r
+| | \r
+| 0008AF 9140 010C | LDS C,VEEL\r
+| 0008B1 9150 010D | LDS D,VEEH\r
+| 0008B3 9190 010E | LDS E,CONTRASTL\r
+| 0008B5 1B49 | SUB C,E\r
+| 0008B6 9190 010F | LDS E,CONTRASTH\r
+| 0008B8 0B59 | SBC D,E\r
+| 0008B9 F41A | BRPL L0545\r
+| | \r
+| 0008BA ED45 | LDI C,LOW(CONTRAST_SHORT)\r
+| 0008BB EF5F | LDI D,HIGH(CONTRAST_SHORT)\r
+| 0008BC C004 | RJMP L0547\r
+| | \r
+| 0008BD EA4C | L0545: LDI C,LOW(CONTRAST_LONG)\r
+| 0008BE EF5E | LDI D,HIGH(CONTRAST_LONG)\r
+| 0008BF 0000 | NOP\r
+| 0008C0 0000 | NOP\r
+| | \r
+| 0008C1 BD59 | L0547: OUT OCR1BH,D ; SET SWITCHING TIME FOR VEE GENERATOR\r
+| 0008C2 BD48 | OUT OCR1BL,C\r
+| | \r
+| 0008C3 E052 | LDI D,2 ; SET TIME FOR START OF LED PULSE\r
+| 0008C4 BF53 | OUT TCCR0,D ; PRESCALE=CK/8\r
+| 0008C5 EE5D | LDI D,-TK_DELAY_0 ; 54uSEC\r
+| 0008C6 BF52 | OUT TCNT0,D\r
+| 0008C7 E051 | LDI D,1\r
+| 0008C8 9350 0168 | STS SCAN_STATE,D\r
+| | \r
+| 0008CA EF5D | LDI D,HIGH(T1_FULL_SCALE)\r
+| 0008CB BD5D | OUT TCNT1H,D\r
+| 0008CC E354 | LDI D,LOW(T1_FULL_SCALE)\r
+| 0008CD BD5C | OUT TCNT1L,D\r
+| | \r
+| 0008CE 988B | CBI DDRD,3 ; START TEMPERATURE MEASUREMENT\r
+| 0008CF 9893 | CBI PORTD,3\r
+| | \r
+| 0008D0 EE50 | LDI D,$E0 ; NEXT COMPARE MATCH MUST SET OC1A\r
+| 0008D1 BD5F | OUT TCCR1A,D ; AND CLR OC1B (FOR REV E PARTS)\r
+| | \r
+| 0008D2 C021 | RJMP T1_OVERFLOW_RET\r
+| | \r
+| | T0_OVERFLOW:\r
+| 0008D3 B61F | IN SR,SREG ; LED/PHOTODIODE SCANNING\r
+| 0008D4 B35A | IN D,DDRA ; SAVE STATE OF THE WORLD\r
+| 0008D5 935F | PUSH D\r
+| 0008D6 B35B | IN D,PORTA\r
+| 0008D7 935F | PUSH D\r
+| 0008D8 B355 | IN D,PORTC\r
+| 0008D9 935F | PUSH D\r
+| 0008DA 9150 0118 | LDS D,LATCH11_SAV\r
+| 0008DC 935F | PUSH D\r
+| 0008DD 9150 0117 | LDS D,LATCH10_SAV\r
+| 0008DF 935F | PUSH D\r
+| | \r
+| 0008E0 93FF | PUSH ZH\r
+| 0008E1 93EF | PUSH ZL\r
+| 0008E2 920F | PUSH R0\r
+| | \r
+| 0008E3 EF5F | LDI D,$FF\r
+| 0008E4 BB5A | OUT DDRA,D ; PORTA OUTPUT\r
+| | \r
+| 0008E5 9150 0168 | LDS D,SCAN_STATE\r
+| 0008E7 9553 | INC D\r
+| 0008E8 9350 0168 | STS SCAN_STATE,D\r
+| 0008EA 955A | DEC D\r
+| 0008EB F0E1 | BREQ SCAN_START ; IF SCAN_STATE WAS = 0\r
+| 0008EC 955A | DEC D\r
+| 0008ED F111 | BREQ SCAN_BEEPER ; IF SCAN_STATE WAS = 1\r
+| | ; IMPLEMENT ENTRY POINT FOR SCAN_PULSE_LED HERE\r
+| 0008EE 955A | DEC D\r
+| 0008EF > RJEQ SCAN_PHOTO ; IF SCAN_STATE WAS = 2\r
+| 0008EF F409 > BRNE LOCAL\r
+| 0008F0 C089 > RJMP SCAN_PHOTO\r
+| > LOCAL:\r
+| | \r
+| | T0_OVERFLOW_RET:\r
+| 0008F1 900F | POP R0\r
+| 0008F2 91EF | POP ZL\r
+| 0008F3 91FF | POP ZH\r
+| | \r
+| | T1_OVERFLOW_RET:\r
+| 0008F4 915F | POP D ; RESTORE STATE OF THE WORLD\r
+| 0008F5 BB5B | OUT PORTA,D\r
+| 0008F6 9AC4 | SBI PORTB,4\r
+| 0008F7 98C4 | CBI PORTB,4\r
+| 0008F8 9350 0117 | STS LATCH10_SAV,D\r
+| 0008FA 915F | POP D\r
+| 0008FB BB5B | OUT PORTA,D\r
+| 0008FC 9AC3 | SBI PORTB,3\r
+| 0008FD 98C3 | CBI PORTB,3\r
+| 0008FE 9350 0118 | STS LATCH11_SAV,D\r
+| 000900 915F | POP D\r
+| 000901 BB55 | OUT PORTC,D\r
+| 000902 915F | POP D\r
+| 000903 BB5B | OUT PORTA,D\r
+| 000904 915F | POP D\r
+| 000905 BB5A | OUT DDRA,D\r
+| | ;MFEED_WDOG\r
+| | EXT_INT_RET:\r
+| 000906 BE1F | OUT SREG,SR\r
+| 000907 9518 | RETI\r
+| | \r
+| | SCAN_START:\r
+| 000908 E053 | LDI D,3 ;5\r
+| 000909 BF53 | OUT TCCR0,D ; PRESCALE=CK/1024\r
+| 00090A EF50 | LDI D,-TK_DELAY_1 ;TK_DELAY_2\r
+| 00090B BF52 | OUT TCNT0,D\r
+| 00090C E051 | LDI D,1\r
+| 00090D 9350 0168 | STS SCAN_STATE,D\r
+| 00090F C153 | RJMP L0617_RESET\r
+| | \r
+| | SCAN_BEEPER:\r
+| 000910 9150 0110 | LDS D,BUZZ_TIME\r
+| 000912 2355 | TST D\r
+| 000913 F199 | BREQ SCAN_PULSE_LED\r
+| 000914 9150 0111 | LDS D,BUZZ_PERIOD\r
+| 000916 5150 | SUBI D,$10\r
+| 000917 F018 | BRLO BUZZ_TOGGLE\r
+| 000918 9350 0111 | STS BUZZ_PERIOD,D\r
+| 00091A C02C | RJMP SCAN_PULSE_LED\r
+| | BUZZ_TOGGLE: ; ASSUME D = $F0 + PERIOD-1\r
+| 00091B 2F45 | MOV C,D ; EG. C = $F3 FOR PERIOD = 4\r
+| 00091C 9542 | SWAP C ; EG. C = $3F FOR PERIOD = 4\r
+| 00091D 2354 | AND D,C ; EG. D = $33 FOR PERIOD = 4\r
+| 00091E 9350 0111 | STS BUZZ_PERIOD,D\r
+| 000920 9140 0119 | LDS C,LATCH12_SAV\r
+| 000922 FF43 | SBRS C,3 ; TEST PREVIOUS SPEAKER STATE\r
+| 000923 C010 | RJMP BEEPER_SPKHI\r
+| 000924 9150 0110 | LDS D,BUZZ_TIME\r
+| 000926 955A | DEC D\r
+| 000927 9350 0110 | STS BUZZ_TIME,D\r
+| 000929 F0A1 | BREQ BEEPER_SPKOFF\r
+| | ;BEEPER_SPKLO:\r
+| 00092A > SPKLO\r
+| 00092A 9150 0119 > LDS D,LATCH12_SAV ; DRIVE SPEAKER LO\r
+| 00092C 7F57 > CBR D,1<<3\r
+| 00092D 6054 > SBR D,1<<2\r
+| 00092E BB55 > OUT PORTC,D\r
+| 00092F 9AC2 > SBI PORTB,2\r
+| 000930 98C2 > CBI PORTB,2\r
+| 000931 9350 0119 > STS LATCH12_SAV,D\r
+| 000933 C013 | RJMP SCAN_PULSE_LED\r
+| | BEEPER_SPKHI:\r
+| 000934 > SPKHI\r
+| 000934 9150 0119 > LDS D,LATCH12_SAV ; DRIVE SPEAKER HI\r
+| 000936 6058 > SBR D,1<<3\r
+| 000937 7F5B > CBR D,1<<2\r
+| 000938 BB55 > OUT PORTC,D\r
+| 000939 9AC2 > SBI PORTB,2\r
+| 00093A 98C2 > CBI PORTB,2\r
+| 00093B 9350 0119 > STS LATCH12_SAV,D\r
+| 00093D C009 | RJMP SCAN_PULSE_LED\r
+| | BEEPER_SPKOFF:\r
+| 00093E > SPKOFF\r
+| 00093E 9150 0119 > LDS D,LATCH12_SAV ; DRIVE SPEAKER OFF\r
+| 000940 7F57 > CBR D,1<<3\r
+| 000941 7F5B > CBR D,1<<2\r
+| 000942 BB55 > OUT PORTC,D\r
+| 000943 9AC2 > SBI PORTB,2\r
+| 000944 98C2 > CBI PORTB,2\r
+| 000945 9350 0119 > STS LATCH12_SAV,D\r
+| | \r
+| | SCAN_PULSE_LED:\r
+| 000947 9150 0169 | LDS D,LATCH5_SAV\r
+| | ;**:\r
+| 000949 FF57 | SBRS D,7 ; ARE WE INSIDE SLEEP_LOOP?\r
+| | ;** SBRC D,7\r
+| 00094A C006 | RJMP SCAN_PULSE_LED_OK ; YES, KEEP TIMER 0 TO RETAIN CONTROL\r
+| | \r
+| 00094B E850 | LDI D,1<<7\r
+| 00094C 26B5 | EOR FLAGS,D\r
+| 00094D F41A | BRPL SCAN_PULSE_LED_OK ; PULSE LED EVERY 2ND CYCLE\r
+| | \r
+| 00094E 2755 | CLR D\r
+| 00094F BF53 | OUT TCCR0,D ; STOP TIMER\r
+| 000950 CFA0 | RJMP T0_OVERFLOW_RET ; AND WASTE EVERY REMAINING CYCLE\r
+| | \r
+| | SCAN_PULSE_LED_OK:\r
+| 000951 E052 | LDI D,2\r
+| 000952 BF53 | OUT TCCR0,D ; PRESCALE=CK/8\r
+| 000953 EF52 | LDI D,-TK_LED_PULSE ; 22uSEC\r
+| 000954 BF52 | OUT TCNT0,D\r
+| | \r
+| | ;LDIZ SCAN_TBL ; POINT TO FIRST LED CHANNEL\r
+| 000955 E3EA | LDI ZL,LOW((SCAN_TBL)*2) ; USE PRIOR TO LPM INSTRUCTION\r
+| 000956 E1F8 | LDI ZH,HIGH((SCAN_TBL)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| 000957 2755 | CLR D\r
+| 000958 0DED | ADD ZL,SCAN\r
+| 000959 1FF5 | ADC ZH,D\r
+| 00095A 95C8 | LPM ; R0 = LED DRIVE VALUE\r
+| 00095B E354 | LDI D,13*4\r
+| 00095C 16D5 | CP SCAN,D\r
+| 00095D F448 | BRSH L0570\r
+| 00095E > LEDLO ; ENABLE HORIZ LED DRIVE\r
+| 00095E 9150 0119 > LDS D,LATCH12_SAV ; DRIVE LED COMMON LO\r
+| 000960 7E5F > CBR D,1<<4\r
+| 000961 BB55 > OUT PORTC,D\r
+| 000962 9AC2 > SBI PORTB,2\r
+| 000963 98C2 > CBI PORTB,2\r
+| 000964 9350 0119 > STS LATCH12_SAV,D\r
+| 000966 C008 | RJMP L0574\r
+| 000967 > L0570: LEDHI ; DISABLE HORIZ LED DRIVE\r
+| 000967 9150 0119 > LDS D,LATCH12_SAV ; DRIVE LED COMMON HI\r
+| 000969 6150 > SBR D,1<<4\r
+| 00096A BB55 > OUT PORTC,D\r
+| 00096B 9AC2 > SBI PORTB,2\r
+| 00096C 98C2 > CBI PORTB,2\r
+| 00096D 9350 0119 > STS LATCH12_SAV,D\r
+| 00096F > L0574: LED R0\r
+| 00096F BA0B > OUT PORTA,R0 ; MAIN LED DRIVE PORT\r
+| 000970 9000 0119 > LDS R0,LATCH12_SAV\r
+| 000972 BA05 > OUT PORTC,R0\r
+| 000973 9AA9 > SBI PORTC,1\r
+| 000974 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000975 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| 000976 98A9 > CBI PORTC,1\r
+| 000977 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000978 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| 000979 CF77 | RJMP T0_OVERFLOW_RET\r
+| | \r
+| | SCAN_PHOTO:\r
+| 00097A B350 | IN D,PIND ; PHOTODIODE STATUS IN BIT 6,D\r
+| 00097B EE40 | LDI C,$E0\r
+| 00097C > LED C ; TURN OFF LED ??\r
+| 00097C BB4B > OUT PORTA,C ; MAIN LED DRIVE PORT\r
+| 00097D 9140 0119 > LDS C,LATCH12_SAV\r
+| 00097F BB45 > OUT PORTC,C\r
+| 000980 9AA9 > SBI PORTC,1\r
+| 000981 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000982 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| 000983 98A9 > CBI PORTC,1\r
+| 000984 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000985 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| | \r
+| 000986 9488 | CLC\r
+| 000987 FD56 | SBRC D,6\r
+| 000988 C008 | RJMP L0593 ; ROW/COLUMN IS INACTIVE\r
+| | \r
+| | ; ROW/COLUMN IS ACTIVE\r
+| 000989 9150 0113 | LDS D,DEBOUNCE\r
+| 00098B 2355 | TST D\r
+| 00098C F019 | BREQ L0591\r
+| 00098D E054 | LDI D,$04\r
+| 00098E 9350 0113 | STS DEBOUNCE,D\r
+| 000990 9408 | L0591: SEC\r
+| | \r
+| | L0593: ; WE HAVE A ROW/COLUMN STATUS IN CF\r
+| 000991 B74F | IN C,SREG\r
+| | \r
+| 000992 E354 | LDI D,13*4\r
+| 000993 16D5 | CP SCAN,D\r
+| 000994 F460 | BRSH L05A8\r
+| | \r
+| | ; WE HAVE A ROW STATUS\r
+| 000995 BF4F | OUT SREG,C ; CF = 0 INACTIVE, CF = 1 ACTIVE\r
+| 000996 91E0 0115 | LDS ZL,ROW_BITMAP\r
+| 000998 91F0 0116 | LDS ZH,ROW_BITMAP+1\r
+| 00099A 1FEE | ROL ZL\r
+| 00099B 1FFF | ROL ZH\r
+| 00099C 93E0 0115 | STS ROW_BITMAP,ZL\r
+| 00099E 93F0 0116 | STS ROW_BITMAP+1,ZH\r
+| 0009A0 C07B | RJMP L05F9\r
+| | \r
+| | L05A8: ; WE HAVE A COLUMN STATUS\r
+| | ; LDS D,LATCH5_SAV\r
+| | ;;**:\r
+| | ; SBRS D,7 ; TURNED OFF?\r
+| | ;;** SBRC D,7\r
+| | ; RJMP L05F9 ; YES, NO FURTHER PROCESSING\r
+| 0009A1 BF4F | OUT SREG,C ; CF = 0 INACTIVE, CF = 1 ACTIVE\r
+| 0009A2 F008 | BRCS L05AB\r
+| 0009A3 C078 | RJMP L05F9\r
+| | \r
+| | L05AB: ; WE HAVE AN ACTIVE COLUMN\r
+| 0009A4 9150 0113 | LDS D,DEBOUNCE\r
+| 0009A6 2355 | TST D\r
+| 0009A7 F021 | BREQ L05B3\r
+| 0009A8 E054 | LDI D,$04\r
+| 0009A9 9350 0113 | STS DEBOUNCE,D\r
+| 0009AB C070 | RJMP L05F9\r
+| | \r
+| | L05B3: ; LOOK FOR ANY ACTIVE ROW\r
+| 0009AC 91F0 0116 | LDS ZH,ROW_BITMAP+1\r
+| 0009AE 91E0 0115 | LDS ZL,ROW_BITMAP\r
+| | \r
+| 0009B0 9150 0114 | LDS D,ROW_INDEX\r
+| 0009B2 2355 | TST D\r
+| 0009B3 F029 | BREQ ROW_BITMAP_LOOP\r
+| | \r
+| 0009B4 2F45 | MOV C,D\r
+| | ROW_BITMAP_SKIP:\r
+| 0009B5 95F7 | ROR ZH\r
+| 0009B6 95E7 | ROR ZL\r
+| 0009B7 5044 | SUBI C,4\r
+| 0009B8 F7E1 | BRNE ROW_BITMAP_SKIP\r
+| | \r
+| | ROW_BITMAP_LOOP:\r
+| 0009B9 5F5C | SUBI D,-4\r
+| 0009BA 95F7 | ROR ZH\r
+| 0009BB 95E7 | ROR ZL\r
+| 0009BC F018 | BRCS FOUND_INTERSECTION\r
+| | ROW_BITMAP_LOOPE:\r
+| 0009BD 3354 | CPI D,13*4\r
+| 0009BE F3D0 | BRLO ROW_BITMAP_LOOP\r
+| | \r
+| | ; NO FURTHER INTERSECTING ROWS FOUND\r
+| 0009BF C05C | RJMP L05F9\r
+| | \r
+| | FOUND_INTERSECTION:\r
+| | ; FOUND AN INTERSECTING ROW FOR COLUMN\r
+| 0009C0 9350 0114 | STS ROW_INDEX,D\r
+| | \r
+| 0009C2 E344 | LDI C,$34 ; BECAUSE ROW_BITMAP IS BEING TESTED\r
+| 0009C3 1B45 | SUB C,D ; IN THE REVERSE ORDER TO ITS CREATION\r
+| | \r
+| | ;LDIZ SCAN_TBL+1 ; POINT TO FIRST TOUCH CHANNEL\r
+| 0009C4 E3EC | LDI ZL,LOW((SCAN_TBL+1)*2) ; USE PRIOR TO LPM INSTRUCTION\r
+| 0009C5 E1F8 | LDI ZH,HIGH((SCAN_TBL+1)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| 0009C6 2755 | CLR D\r
+| 0009C7 0FE4 | ADD ZL,C\r
+| 0009C8 1FF5 | ADC ZH,D\r
+| 0009C9 95C8 | LPM\r
+| 0009CA 2D40 | MOV C,R0\r
+| 0009CB 0C00 | LSL R0\r
+| 0009CC 0C00 | LSL R0\r
+| 0009CD 0C00 | LSL R0\r
+| 0009CE 0D40 | ADD C,R0\r
+| 0009CF 0C00 | LSL R0\r
+| 0009D0 0D40 | ADD C,R0\r
+| | \r
+| | ;LDIZ SCAN_TBL+1 ; POINT TO FIRST TOUCH CHANNEL\r
+| 0009D1 E3EC | LDI ZL,LOW((SCAN_TBL+1)*2) ; USE PRIOR TO LPM INSTRUCTION\r
+| 0009D2 E1F8 | LDI ZH,HIGH((SCAN_TBL+1)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| 0009D3 2755 | CLR D\r
+| 0009D4 0DED | ADD ZL,SCAN\r
+| 0009D5 1FF5 | ADC ZH,D\r
+| 0009D6 95C8 | LPM\r
+| 0009D7 0D40 | ADD C,R0\r
+| 0009D8 E0E0 | LDI ZL,LOW(RTN_DSPRAM) ; RETURN CODE TABLE\r
+| 0009D9 EEF0 | LDI ZH,HIGH(RTN_DSPRAM)\r
+| 0009DA 2755 | CLR D\r
+| 0009DB 0FE4 | ADD ZL,C\r
+| 0009DC 1FF5 | ADC ZH,D\r
+| | \r
+| 0009DD > A0_A15 ZL,ZH\r
+| 0009DD 933F > PUSH R19\r
+| > \r
+| 0009DE 2F3E > MOV R19,ZL\r
+| 0009DF 733F > ANDI R19,$3F\r
+| 0009E0 BB35 > OUT PORTC,R19\r
+| > \r
+| 0009E1 2F3F > MOV R19,ZH\r
+| 0009E2 0F33 > LSL R19\r
+| 0009E3 0F33 > LSL R19\r
+| 0009E4 FBE7 > BST ZL,7 ; A7\r
+| 0009E5 F931 > BLD R19,1\r
+| 0009E6 FBE6 > BST ZL,6 ; A6\r
+| 0009E7 F930 > BLD R19,0\r
+| 0009E8 BB3B > OUT PORTA,R19\r
+| 0009E9 9AC3 > SBI PORTB,3\r
+| 0009EA 98C3 > CBI PORTB,3\r
+| 0009EB 93F0 0118 > STS LATCH11_SAV,ZH\r
+| > \r
+| 0009ED 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 0009EF FBF7 > BST ZH,7 ; A15\r
+| 0009F0 F931 > BLD R19,1\r
+| 0009F1 FBF6 > BST ZH,6 ; A14\r
+| 0009F2 F930 > BLD R19,0\r
+| 0009F3 BB3B > OUT PORTA,R19\r
+| 0009F4 9AC4 > SBI PORTB,4\r
+| 0009F5 98C4 > CBI PORTB,4\r
+| 0009F6 9330 0117 > STS LATCH10_SAV,R19\r
+| > \r
+| 0009F8 913F > POP R19\r
+| | \r
+| 0009F9 930F | PUSH F\r
+| 0009FA > RAMRDX R0\r
+| 0009FA 2700 > CLR F\r
+| 0009FB BB0A > OUT DDRA,F ; PORTA INPUT\r
+| 0009FC 98C0 > CBI PORTB,0 ; CS_ON\r
+| 0009FD 0000 > NOP\r
+| 0009FE 9AC0 > SBI PORTB,0 ; CS_OFF\r
+| 0009FF B209 > IN R0,PINA ; READ DATA\r
+| 000A00 EF0F > LDI F,$FF\r
+| 000A01 BB0A > OUT DDRA,F ; PORTA OUTPUT\r
+| 000A02 910F | POP F\r
+| | \r
+| 000A03 2000 | TST R0\r
+| 000A04 F429 | BRNE VALID_INTERSECTION\r
+| | \r
+| | ; INTERSECTION IS NULL, GO ON TO NEXT\r
+| 000A05 9150 0114 | LDS D,ROW_INDEX\r
+| 000A07 3354 | CPI D,13*4\r
+| 000A08 F498 | BRSH L05F9 ; DONE LAST ROW, GO ON TO NEXT COLUMN\r
+| | GO_L0617:\r
+| 000A09 C05E | RJMP L0617 ; GO ON TO NEXT ROW, SAME COLUMN\r
+| | \r
+| | VALID_INTERSECTION:\r
+| | ; INTERSECTION IS VALID, WE HAVE KEY MAKE\r
+| 000A0A E054 | LDI D,$04\r
+| 000A0B 9350 0113 | STS DEBOUNCE,D\r
+| 000A0D 9200 0107 | STS ACTIVE_ZONE,R0\r
+| 000A0F E356 | LDI D,54 ;43\r
+| 000A10 9350 0110 | STS BUZZ_TIME,D ; SHORT BEEP ON MAKE\r
+| | \r
+| 000A12 2D55 | MOV D,TX_COUNT\r
+| 000A13 315F | CPI D,TX_SIZE-1\r
+| 000A14 F438 | BRSH L05F9\r
+| | \r
+| 000A15 931F | PUSH A\r
+| 000A16 2D10 | MOV A,R0\r
+| 000A17 DA8D | RCALL TX_CHAR\r
+| 000A18 311B | CPI A,$1B\r
+| 000A19 F409 | BRNE TX_CONT\r
+| 000A1A DA8A | RCALL TX_CHAR\r
+| | TX_CONT:\r
+| 000A1B 911F | POP A\r
+| | \r
+| | L05F9:\r
+| 000A1C E054 | LDI D,4 ; SCAN TO NEXT LED / PHOTODIODE PAIR\r
+| 000A1D 0ED5 | ADD SCAN,D\r
+| | \r
+| 000A1E 9150 0169 | LDS D,LATCH5_SAV\r
+| 000A20 FD57 | SBRC D,7\r
+| 000A21 C027 | RJMP TURNED_ON\r
+| | \r
+| 000A22 E053 | LDI D,3\r
+| 000A23 BF53 | OUT TCCR0,D ; PRESCALE=CK/64\r
+| 000A24 EF50 | LDI D,-TK_DELAY_1\r
+| 000A25 BF52 | OUT TCNT0,D\r
+| 000A26 E051 | LDI D,1\r
+| 000A27 9350 0168 | STS SCAN_STATE,D\r
+| | \r
+| 000A29 E344 | LDI C,13*4\r
+| 000A2A 16D4 | CP SCAN,C\r
+| 000A2B F2E8 | BRLO GO_L0617\r
+| | \r
+| | ; KEEP VDD ON, TO AVOID THE LONG TK_DELAY_2\r
+| | ;LDS D,LATCH5_SAV\r
+| | ;ANDI D,$BF ; BIT 6 = 0 VDD OFF\r
+| | ;STS LATCH5_SAV,D\r
+| | ;PHOTO D ; READY TO SLEEP FOR ANOTHER 0.25 SEC\r
+| | \r
+| 000A2C E050 | LDI D,0\r
+| 000A2D BF53 | OUT TCCR0,D ; STOP TIMER SINCE COMPLETE SCAN DONE\r
+| | ;RJMP T0_OVERFLOW_RET\r
+| | \r
+| | ;LDI D,$05\r
+| | ;OUT UBRR,D\r
+| | ;LDI D,$18\r
+| | ;OUT UCR,D\r
+| 000A2E 9150 0116 | LDS D,ROW_BITMAP+1\r
+| 000A30 9140 0115 | LDS C,ROW_BITMAP\r
+| | ;OUT UDR,C\r
+| | ;OUT UDR,D\r
+| 000A32 2B45 | OR C,D ; HAVE WE SOME ACTIVITY?\r
+| | \r
+| 000A33 9150 016A | LDS D,TURNON_COUNT\r
+| 000A35 3054 | CPI D,4\r
+| 000A36 F418 | BRSH TURNON_BREAK ; WAITING FOR BREAK\r
+| 000A37 3051 | CPI D,1\r
+| 000A38 F428 | BRSH TURNON_MAKE ; WAITING FOR MAKE\r
+| | GO_T0_OVERFLOW_RET:\r
+| 000A39 CEB7 | RJMP T0_OVERFLOW_RET ; ALREADY HAD MAKE, NOT TURNED ON YET\r
+| | \r
+| | TURNON_BREAK:\r
+| 000A3A 2344 | TST C ; HAD SOME ACTIVITY?\r
+| 000A3B F029 | BREQ TURNON_SAVE ; NO, COUNT DOWN TO BREAK\r
+| 000A3C E055 | LDI D,4+1 ; YES, RESTART COUNTDOWN TO BREAK\r
+| 000A3D C003 | RJMP TURNON_SAVE\r
+| | TURNON_MAKE:\r
+| 000A3E 2344 | TST C ; HAD SOME ACTIVITY?\r
+| 000A3F F409 | BRNE TURNON_SAVE ; YES, COUNT DOWN TO MAKE\r
+| 000A40 E054 | LDI D,3+1 ; NO, RESTART COUNTDOWN TO MAKE\r
+| | TURNON_SAVE:\r
+| 000A41 955A | DEC D ; COUNT DOWN TO MAKE OR BREAK\r
+| 000A42 9350 016A | STS TURNON_COUNT,D\r
+| 000A44 F7A1 | BRNE GO_T0_OVERFLOW_RET ; NOT READY TO TRY TURNON YET\r
+| | \r
+| 000A45 EB5F | LDI D,~(1<<6)\r
+| 000A46 22B5 | AND FLAGS,D ; SAY WE TURNED OFF VIA BREAK DETECTION\r
+| 000A47 988A | CBI DDRD,2 ; D2 = TRI-STATE, VSWT ON\r
+| 000A48 CDCE | RJMP GO_SLEEP_ENTRY ; WE WILL NOW WAIT FOR TURNON COMMAND\r
+| | \r
+| | TURNED_ON:\r
+| 000A49 E050 | LDI D,0 ; STOP TIMER, WE WILL REGAIN\r
+| 000A4A BF53 | OUT TCCR0,D ; CONTROL VIA NEXT CLOCKING INTERRUPT\r
+| 000A4B 9350 0114 | STS ROW_INDEX,D\r
+| | \r
+| 000A4D EC48 | LDI C,50*4\r
+| 000A4E 16D4 | CP SCAN,C\r
+| 000A4F F0C0 | BRLO L0617\r
+| | \r
+| 000A50 9150 0113 | LDS D,DEBOUNCE ; COMPLETED ENTIRE SCAN, START NEW SCAN\r
+| 000A52 2355 | TST D\r
+| 000A53 F079 | BREQ L0617_RESET\r
+| 000A54 955A | DEC D\r
+| 000A55 9350 0113 | STS DEBOUNCE,D\r
+| 000A57 F459 | BRNE L0617_RESET\r
+| | \r
+| 000A58 9150 0107 | LDS D,ACTIVE_ZONE\r
+| 000A5A 2355 | TST D\r
+| 000A5B F039 | BREQ L0617_RESET\r
+| | \r
+| 000A5C 2D55 | MOV D,TX_COUNT\r
+| 000A5D 3250 | CPI D,TX_SIZE\r
+| 000A5E F420 | BRSH L0617_RESET\r
+| | \r
+| 000A5F 931F | PUSH A\r
+| 000A60 E010 | LDI A,0\r
+| 000A61 DA43 | RCALL TX_CHAR\r
+| 000A62 911F | POP A\r
+| | \r
+| | L0617_RESET:\r
+| 000A63 24DD | CLR SCAN\r
+| 000A64 92D0 0115 | STS ROW_BITMAP,SCAN\r
+| 000A66 92D0 0116 | STS ROW_BITMAP+1,SCAN\r
+| | \r
+| | L0617: ; SELECT PHOTODIODE AND ALLOW TO SETTLE\r
+| | ;LDIZ SCAN_TBL\r
+| 000A68 E3EA | LDI ZL,LOW((SCAN_TBL)*2) ; USE PRIOR TO LPM INSTRUCTION\r
+| 000A69 E1F8 | LDI ZH,HIGH((SCAN_TBL)*2) ; EXTRA BRACKETS NEEDED IF @0=EXPRESSION\r
+| | \r
+| 000A6A 9631 | ADIW ZL,1 ; POINT TO FIRST PHOTO CHANNEL\r
+| 000A6B 2755 | CLR D\r
+| 000A6C 0DED | ADD ZL,SCAN\r
+| 000A6D 1FF5 | ADC ZH,D\r
+| 000A6E 95C8 | LPM\r
+| 000A6F 9150 0169 | LDS D,LATCH5_SAV\r
+| 000A71 7850 | ANDI D,$80 ; BIT 7 = PRESERVED, LCD ON/OFF STATUS\r
+| 000A72 6450 | ORI D,$40 ; BIT 6 = 1 VDD ON\r
+| 000A73 2950 | OR D,R0\r
+| 000A74 9350 0169 | STS LATCH5_SAV,D\r
+| 000A76 > PHOTO D\r
+| 000A76 BB5B > OUT PORTA,D ; SELECT PHOTODIODE CHANNEL\r
+| 000A77 9150 0119 > LDS D,LATCH12_SAV\r
+| 000A79 BB55 > OUT PORTC,D\r
+| 000A7A 9AA8 > SBI PORTC,0\r
+| 000A7B 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000A7C 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| 000A7D 98A8 > CBI PORTC,0\r
+| 000A7E 9AC2 > SBI PORTB,2 ; THIS WILL PROVIDE LE=1\r
+| 000A7F 98C2 > CBI PORTB,2 ; THIS WILL PROVIDE G=0\r
+| 000A80 CE70 | RJMP T0_OVERFLOW_RET\r
+| | \r
+| 000A81 2499 | SCROLL: CLR LINE_CNT\r
+| | \r
+| 000A82 E0C0 | LDI YL,LOW(DRAW_DSPRAM) ; SCROLL UP\r
+| 000A83 E2D0 | LDI YH,HIGH(DRAW_DSPRAM)\r
+| 000A84 E0A0 | LDI XL,LOW(DRAW_DSPRAM)\r
+| 000A85 E2B0 | LDI XH,HIGH(DRAW_DSPRAM)\r
+| | \r
+| 000A86 E118 | LDI A,HIGH(DRAW_DSPRAM>>6)\r
+| 000A87 D105 | RCALL SELECT_XPAGE\r
+| | \r
+| 000A88 5CA0 | L0628: SUBI XL,LOW(-$40)\r
+| 000A89 4FBF | SBCI XH,HIGH(-$40)\r
+| 000A8A 940A | DEC R0\r
+| 000A8B F7E1 | BRNE L0628\r
+| | \r
+| 000A8C E220 | L062C: LDI B,$20 ; COPYING 32 BYTES\r
+| 000A8D 932F | L062D: PUSH B\r
+| 000A8E D0C8 | RCALL READ_BYTE\r
+| 000A8F D0E3 | RCALL WRITE_BYTE\r
+| 000A90 95A3 | INC XL\r
+| 000A91 95C3 | INC YL\r
+| 000A92 912F | POP B\r
+| 000A93 952A | DEC B\r
+| 000A94 > RJNE L062D ;BRNE L062D\r
+| 000A94 F009 > BREQ LOCAL\r
+| 000A95 CFF7 > RJMP L062D\r
+| > LOCAL:\r
+| | \r
+| 000A96 DB1D | RCALL NICK_SUB1\r
+| 000A97 9493 | INC LINE_CNT\r
+| 000A98 96A0 | ADIW YL,$20\r
+| 000A99 9690 | ADIW XL,$20\r
+| 000A9A 34B0 | CPI XH,HIGH(DRAW_DSPRAM+DISPLAY_LINES*$40)\r
+| 000A9B > RJNE L062C ;BRNE L062C\r
+| 000A9B F009 > BREQ LOCAL\r
+| 000A9C CFEF > RJMP L062C\r
+| > LOCAL:\r
+| 000A9D CD1B | RJMP CLEAR_DISPLAY_LOOP\r
+| | \r
+| | SCROLL_REGION:\r
+| 000A9E D9DF | RCALL RX_WAIT\r
+| 000A9F 931F | PUSH A ; DIRECTION TO SCROLL\r
+| | \r
+| 000AA0 D9DD | RCALL RX_WAIT\r
+| 000AA1 9310 0172 | STS SCROLL_COUNT,A ; AMOUNT TO SCROLL IN PIXEL LINES\r
+| | \r
+| 000AA3 D9DA | RCALL RX_WAIT\r
+| 000AA4 9516 | LSR A\r
+| 000AA5 9516 | LSR A\r
+| 000AA6 9516 | LSR A\r
+| 000AA7 F409 | BRNE SCROLL_WIDTH_OK\r
+| 000AA8 E210 | LDI A,32 ; ENTRY WIDTH OF 0 = FULL\r
+| | SCROLL_WIDTH_OK:\r
+| 000AA9 9310 0175 | STS SCROLL_XX,A ; X SIZE OF REGION IN BYTES\r
+| | \r
+| 000AAB D9D2 | RCALL RX_WAIT\r
+| 000AAC 9310 0176 | STS SCROLL_YY,A ; Y SIZE OF REGION IN PIXEL LINES\r
+| | \r
+| 000AAE 2F17 | MOV A,CURSORX\r
+| 000AAF 9516 | LSR A\r
+| 000AB0 9516 | LSR A\r
+| 000AB1 9516 | LSR A\r
+| 000AB2 9310 0173 | STS SCROLL_X,A\r
+| 000AB4 9380 0174 | STS SCROLL_Y,CURSORY\r
+| | \r
+| 000AB6 E118 | LDI A,HIGH(DRAW_DSPRAM>>6)\r
+| 000AB7 D0D5 | RCALL SELECT_XPAGE\r
+| | \r
+| 000AB8 911F | POP A ; DIRECTION TO SCROLL\r
+| 000AB9 FD10 | SBRC A,0\r
+| 000ABA C046 | RJMP SCROLL_DOWN\r
+| | \r
+| | ;SCROLL_UP:\r
+| 000ABB 27CC | CLR YL\r
+| 000ABC 91D0 0174 | LDS YH,SCROLL_Y\r
+| 000ABE 2E9D | MOV LINE_CNT,YH ; FOR NICK_SUB1\r
+| 000ABF 95D6 | LSR YH\r
+| 000AC0 95C7 | ROR YL\r
+| 000AC1 95D6 | LSR YH\r
+| 000AC2 95C7 | ROR YL\r
+| 000AC3 9110 0173 | LDS A,SCROLL_X\r
+| 000AC5 0FC1 | ADD YL,A\r
+| 000AC6 5ED0 | SUBI YH,HIGH(-DRAW_DSPRAM) ; Y = DESTINATION WITHIN DRAWING BUFFER\r
+| | \r
+| 000AC7 9120 0176 | LDS B,SCROLL_YY\r
+| 000AC9 9110 0172 | LDS A,SCROLL_COUNT\r
+| 000ACB 1712 | CP A,B\r
+| 000ACC F520 | BRSH SCROLL_UP_CLEAR ; WITH B = LINES TO CLEAR\r
+| 000ACD 1B21 | SUB B,A ; CALCULATE B = LINES TO COPY INTACT\r
+| | \r
+| 000ACE 27AA | CLR XL\r
+| 000ACF 91B0 0174 | LDS XH,SCROLL_Y\r
+| 000AD1 0FB1 | ADD XH,A ; SCROLL_COUNT\r
+| 000AD2 95B6 | LSR XH\r
+| 000AD3 95A7 | ROR XL\r
+| 000AD4 95B6 | LSR XH\r
+| 000AD5 95A7 | ROR XL\r
+| 000AD6 9110 0173 | LDS A,SCROLL_X\r
+| 000AD8 0FA1 | ADD XL,A\r
+| 000AD9 5EB0 | SUBI XH,HIGH(-DRAW_DSPRAM) ; X = SOURCE WITHIN DRAWING BUFFER\r
+| | \r
+| | SCROLL_UP_LOOP:\r
+| 000ADA 932F | PUSH B\r
+| 000ADB 93AF | PUSH XL\r
+| 000ADC 93BF | PUSH XH\r
+| 000ADD 93CF | PUSH YL\r
+| 000ADE 93DF | PUSH YH\r
+| | \r
+| 000ADF 9120 0175 | LDS B,SCROLL_XX\r
+| 000AE1 D068 | RCALL COPY_BYTES\r
+| 000AE2 DAD1 | RCALL NICK_SUB1\r
+| | \r
+| 000AE3 91DF | POP YH\r
+| 000AE4 91CF | POP YL\r
+| 000AE5 91BF | POP XH\r
+| 000AE6 91AF | POP XL\r
+| 000AE7 912F | POP B\r
+| | \r
+| 000AE8 9493 | INC LINE_CNT\r
+| 000AE9 5CA0 | SUBI XL,LOW(-$40)\r
+| 000AEA 4FBF | SBCI XH,HIGH(-$40)\r
+| 000AEB 5CC0 | SUBI YL,LOW(-$40)\r
+| 000AEC 4FDF | SBCI YH,HIGH(-$40)\r
+| | \r
+| 000AED 952A | DEC B\r
+| 000AEE F759 | BRNE SCROLL_UP_LOOP\r
+| | \r
+| 000AEF 9120 0172 | LDS B,SCROLL_COUNT ; B = LINES TO CLEAR\r
+| | \r
+| | SCROLL_UP_CLEAR:\r
+| 000AF1 932F | PUSH B\r
+| 000AF2 93CF | PUSH YL\r
+| 000AF3 93DF | PUSH YH\r
+| | \r
+| 000AF4 9120 0175 | LDS B,SCROLL_XX\r
+| 000AF6 D05A | RCALL CLEAR_BYTES\r
+| 000AF7 DABC | RCALL NICK_SUB1\r
+| | \r
+| 000AF8 91DF | POP YH\r
+| 000AF9 91CF | POP YL\r
+| 000AFA 912F | POP B\r
+| | \r
+| 000AFB 9493 | INC LINE_CNT\r
+| 000AFC 5CC0 | SUBI YL,LOW(-$40)\r
+| 000AFD 4FDF | SBCI YH,HIGH(-$40)\r
+| | \r
+| 000AFE 952A | DEC B\r
+| 000AFF F789 | BRNE SCROLL_UP_CLEAR\r
+| | \r
+| 000B00 CB06 | RJMP GO_MAIN_LOOP\r
+| | \r
+| | SCROLL_DOWN:\r
+| 000B01 27CC | CLR YL\r
+| 000B02 91D0 0174 | LDS YH,SCROLL_Y\r
+| 000B04 9100 0176 | LDS F,SCROLL_YY\r
+| 000B06 0FD0 | ADD YH,F\r
+| 000B07 2E9D | MOV LINE_CNT,YH ; FOR NICK_SUB1\r
+| 000B08 95D6 | LSR YH\r
+| 000B09 95C7 | ROR YL\r
+| 000B0A 95D6 | LSR YH\r
+| 000B0B 95C7 | ROR YL\r
+| 000B0C 9110 0173 | LDS A,SCROLL_X\r
+| 000B0E 0FC1 | ADD YL,A\r
+| 000B0F 5ED0 | SUBI YH,HIGH(-DRAW_DSPRAM) ; Y = DESTINATION WITHIN DRAWING BUFFER\r
+| | \r
+| 000B10 2F20 | MOV B,F ;LDS B,SCROLL_YY\r
+| 000B11 9110 0172 | LDS A,SCROLL_COUNT\r
+| 000B13 1712 | CP A,B\r
+| 000B14 F528 | BRSH SCROLL_DOWN_CLEAR ; WITH B = LINES TO CLEAR\r
+| 000B15 1B21 | SUB B,A ; CALCULATE B = LINES TO COPY INTACT\r
+| | \r
+| 000B16 27AA | CLR XL\r
+| 000B17 91B0 0174 | LDS XH,SCROLL_Y\r
+| 000B19 0FB0 | ADD XH,F\r
+| 000B1A 1BB1 | SUB XH,A ; SCROLL_COUNT\r
+| 000B1B 95B6 | LSR XH\r
+| 000B1C 95A7 | ROR XL\r
+| 000B1D 95B6 | LSR XH\r
+| 000B1E 95A7 | ROR XL\r
+| 000B1F 9110 0173 | LDS A,SCROLL_X\r
+| 000B21 0FA1 | ADD XL,A\r
+| 000B22 5EB0 | SUBI XH,HIGH(-DRAW_DSPRAM) ; X = SOURCE WITHIN DRAWING BUFFER\r
+| | \r
+| | SCROLL_DOWN_LOOP:\r
+| 000B23 949A | DEC LINE_CNT\r
+| 000B24 54A0 | SUBI XL,LOW($40)\r
+| 000B25 40B0 | SBCI XH,HIGH($40)\r
+| 000B26 54C0 | SUBI YL,LOW($40)\r
+| 000B27 40D0 | SBCI YH,HIGH($40)\r
+| | \r
+| 000B28 932F | PUSH B\r
+| 000B29 93AF | PUSH XL\r
+| 000B2A 93BF | PUSH XH\r
+| 000B2B 93CF | PUSH YL\r
+| 000B2C 93DF | PUSH YH\r
+| | \r
+| 000B2D 9120 0175 | LDS B,SCROLL_XX\r
+| 000B2F D01A | RCALL COPY_BYTES\r
+| 000B30 DA83 | RCALL NICK_SUB1\r
+| | \r
+| 000B31 91DF | POP YH\r
+| 000B32 91CF | POP YL\r
+| 000B33 91BF | POP XH\r
+| 000B34 91AF | POP XL\r
+| 000B35 912F | POP B\r
+| | \r
+| 000B36 952A | DEC B\r
+| 000B37 F759 | BRNE SCROLL_DOWN_LOOP\r
+| | \r
+| 000B38 9120 0172 | LDS B,SCROLL_COUNT ; B = LINES TO CLEAR\r
+| | \r
+| | SCROLL_DOWN_CLEAR:\r
+| 000B3A 949A | DEC LINE_CNT\r
+| 000B3B 54C0 | SUBI YL,LOW($40)\r
+| 000B3C 40D0 | SBCI YH,HIGH($40)\r
+| | \r
+| 000B3D 932F | PUSH B\r
+| 000B3E 93CF | PUSH YL\r
+| 000B3F 93DF | PUSH YH\r
+| | \r
+| 000B40 9120 0175 | LDS B,SCROLL_XX\r
+| 000B42 D00E | RCALL CLEAR_BYTES\r
+| 000B43 DA70 | RCALL NICK_SUB1\r
+| | \r
+| 000B44 91DF | POP YH\r
+| 000B45 91CF | POP YL\r
+| 000B46 912F | POP B\r
+| | \r
+| 000B47 952A | DEC B\r
+| 000B48 F789 | BRNE SCROLL_DOWN_CLEAR\r
+| | \r
+| 000B49 CABD | RJMP GO_MAIN_LOOP\r
+| | \r
+| | COPY_BYTES:\r
+| 000B4A D00C | RCALL READ_BYTE\r
+| 000B4B 9611 | ADIW XL,1\r
+| | \r
+| 000B4C D026 | RCALL WRITE_BYTE\r
+| 000B4D 9621 | ADIW YL,1\r
+| | \r
+| 000B4E 952A | DEC B\r
+| 000B4F F7D1 | BRNE COPY_BYTES\r
+| | \r
+| 000B50 9508 | RET\r
+| | \r
+| | CLEAR_BYTES:\r
+| 000B51 E010 | LDI A,0\r
+| | \r
+| | FILL_BYTES:\r
+| 000B52 D020 | RCALL WRITE_BYTE\r
+| 000B53 9621 | ADIW YL,1\r
+| | \r
+| 000B54 952A | DEC B\r
+| 000B55 F7E1 | BRNE FILL_BYTES\r
+| | \r
+| 000B56 9508 | RET\r
+| | \r
+| | READ_BYTE:\r
+| 000B57 > A0_A13 XL,XH\r
+| 000B57 2F3A > MOV R19,XL\r
+| 000B58 733F > ANDI R19,$3F\r
+| 000B59 BB35 > OUT PORTC,R19\r
+| > \r
+| 000B5A 2F3B > MOV R19,XH\r
+| 000B5B 0F33 > LSL R19\r
+| 000B5C 0F33 > LSL R19\r
+| 000B5D FBA7 > BST XL,7 ; A7\r
+| 000B5E F931 > BLD R19,1\r
+| 000B5F FBA6 > BST XL,6 ; A6\r
+| 000B60 F930 > BLD R19,0\r
+| 000B61 BB3B > OUT PORTA,R19\r
+| 000B62 94F8 > CLI\r
+| 000B63 9AC3 > SBI PORTB,3\r
+| 000B64 98C3 > CBI PORTB,3\r
+| 000B65 9478 > SEI\r
+| 000B66 9330 0118 > STS LATCH11_SAV,R19\r
+| 000B68 > RAMRD A\r
+| 000B68 2700 > CLR F\r
+| 000B69 BB0A > OUT DDRA,F ; PORTA INPUT\r
+| 000B6A 94F8 > CLI\r
+| 000B6B 98C0 > CBI PORTB,0 ; CS_ON\r
+| 000B6C 0000 > NOP\r
+| 000B6D 9AC0 > SBI PORTB,0 ; CS_OFF\r
+| 000B6E B319 > IN A,PINA ; READ DATA\r
+| 000B6F 9478 > SEI\r
+| 000B70 EF0F > LDI F,$FF\r
+| 000B71 BB0A > OUT DDRA,F ; PORTA OUTPUT\r
+| 000B72 9508 | RET\r
+| | \r
+| | WRITE_BYTE:\r
+| 000B73 > A0_A13 YL,YH\r
+| 000B73 2F3C > MOV R19,YL\r
+| 000B74 733F > ANDI R19,$3F\r
+| 000B75 BB35 > OUT PORTC,R19\r
+| > \r
+| 000B76 2F3D > MOV R19,YH\r
+| 000B77 0F33 > LSL R19\r
+| 000B78 0F33 > LSL R19\r
+| 000B79 FBC7 > BST YL,7 ; A7\r
+| 000B7A F931 > BLD R19,1\r
+| 000B7B FBC6 > BST YL,6 ; A6\r
+| 000B7C F930 > BLD R19,0\r
+| 000B7D BB3B > OUT PORTA,R19\r
+| 000B7E 94F8 > CLI\r
+| 000B7F 9AC3 > SBI PORTB,3\r
+| 000B80 98C3 > CBI PORTB,3\r
+| 000B81 9478 > SEI\r
+| 000B82 9330 0118 > STS LATCH11_SAV,R19\r
+| 000B84 > RAMWR A\r
+| 000B84 BB1B > OUT PORTA,A\r
+| 000B85 94F8 > CLI\r
+| 000B86 98C1 > CBI PORTB,1\r
+| 000B87 98C0 > CBI PORTB,0\r
+| 000B88 0000 > NOP\r
+| 000B89 9AC0 > SBI PORTB,0\r
+| 000B8A 9478 > SEI\r
+| 000B8B 9AC1 > SBI PORTB,1\r
+| 000B8C 9508 | RET\r
+| | \r
+| | SELECT_XPAGE:\r
+| 000B8D > A14_A18 A\r
+| 000B8D 94F8 > CLI\r
+| 000B8E 9130 0117 > LDS R19,LATCH10_SAV ; AND THIS\r
+| 000B90 2731 > EOR R19,A\r
+| 000B91 7E30 > ANDI R19,$E0\r
+| 000B92 2731 > EOR R19,A\r
+| 000B93 BB3B > OUT PORTA,R19\r
+| 000B94 9AC4 > SBI PORTB,4\r
+| 000B95 98C4 > CBI PORTB,4\r
+| 000B96 9478 > SEI\r
+| 000B97 9330 0117 > STS LATCH10_SAV,R19 ; MUST BE ATOMIC DUE TO TOGGLING M\r
+| 000B99 9508 | RET\r
+| | \r
+| | ; HOW MANY SECS/6553600 PER 4HZ INTERRUPT ?\r
+| | ; EACH TIME THROUGH ADD 1638400 SECS/6553600 = 1/4 SEC\r
+| | ; OSCILLATOR IS SLOW SO WE WILL ADD 1 PART IN 10000\r
+| | ; HENCE EACH TIME THROUGH ADD 1638400+164 = 1638564 UNITS TO COUNT\r
+| | \r
+| | TIM2_OVF:\r
+| 000B9A B61F | IN SR,SREG\r
+| | \r
+| | ; REMOVED BECAUSE DON'T WANT TO HAVE IN AN INTERRUPT\r
+| | ;WDR\r
+| | \r
+| | ;!! LDI A,$10 ; DIAGNOSTIC\r
+| | ;!! STS BUZZ_TIME,A ; SHORT BEEP\r
+| | \r
+| 000B9B 9150 015F | LDS D,TIME_HSEC_64K\r
+| 000B9D 555C | SUBI D,LOW(-1638564)\r
+| 000B9E 9350 015F | STS TIME_HSEC_64K,D\r
+| | \r
+| 000BA0 9150 0160 | LDS D,TIME_HSEC_256\r
+| 000BA2 4F5F | SBCI D,HIGH(-1638564)\r
+| 000BA3 9350 0160 | STS TIME_HSEC_256,D\r
+| | \r
+| 000BA5 9150 0161 | LDS D,TIME_HSEC\r
+| 000BA7 4E56 | SBCI D,HIGH(-1638564>>8)\r
+| 000BA8 3654 | CPI D,100\r
+| 000BA9 F450 | BRSH TIM2_CARRY\r
+| 000BAA 9350 0161 | STS TIME_HSEC,D\r
+| | \r
+| | TIM2_END:\r
+| 000BAC BE1F | OUT SREG,SR\r
+| 000BAD FEB6 | SBRS FLAGS,6 ; IF WE TURNED OFF VIA COMMAND,\r
+| 000BAE 9518 | RETI ; START A NEW SCAN, OTHERWISE DONE\r
+| | \r
+| 000BAF E050 | LDI D,0\r
+| 000BB0 9350 0168 | STS SCAN_STATE,D ; WE WILL EXECUTE SCAN_START ROUTINE\r
+| 000BB2 CD20 | RJMP T0_OVERFLOW ; GO AND TURN VDD ON\r
+| | \r
+| | GO_TX_CHAR:\r
+| 000BB3 C8F1 | RJMP TX_CHAR\r
+| | \r
+| | TIM2_CARRY:\r
+| 000BB4 E050 | LDI D,0\r
+| 000BB5 9350 0161 | STS TIME_HSEC,D\r
+| | \r
+| 000BB7 9150 0162 | LDS D,TIME_SECOND\r
+| 000BB9 9553 | INC D\r
+| 000BBA 335C | CPI D,60\r
+| 000BBB F1E8 | BRLO TIM2_SECOND\r
+| | \r
+| 000BBC 9150 0163 | LDS D,TIME_MINUTE\r
+| 000BBE 9553 | INC D\r
+| 000BBF 335C | CPI D,60\r
+| 000BC0 F1A8 | BRLO TIM2_MINUTE\r
+| | \r
+| 000BC1 9150 0164 | LDS D,TIME_HOUR\r
+| 000BC3 9553 | INC D\r
+| 000BC4 3158 | CPI D,24\r
+| 000BC5 F168 | BRLO TIM2_HOUR\r
+| | \r
+| 000BC6 93EF | PUSH ZL\r
+| 000BC7 93FF | PUSH ZH\r
+| 000BC8 920F | PUSH R0\r
+| 000BC9 E2ED | LDI ZL,LOW(MONTH_TABLE*2-1)\r
+| 000BCA E1F8 | LDI ZH,HIGH(MONTH_TABLE*2-1)\r
+| 000BCB 9190 0166 | LDS E,DATE_MONTH\r
+| 000BCD 0FE9 | ADD ZL,E\r
+| 000BCE E090 | LDI E,0\r
+| 000BCF 1FF9 | ADC ZH,E\r
+| 000BD0 95C8 | LPM\r
+| 000BD1 2D90 | MOV E,R0\r
+| 000BD2 319C | CPI E,28\r
+| 000BD3 F431 | BRNE FEBRUARY_OK\r
+| 000BD4 9190 0167 | LDS E,DATE_YEAR\r
+| 000BD6 7093 | ANDI E,3\r
+| 000BD7 E19C | LDI E,28\r
+| 000BD8 F409 | BRNE FEBRUARY_OK\r
+| 000BD9 E19D | LDI E,29\r
+| | FEBRUARY_OK:\r
+| 000BDA 900F | POP R0\r
+| 000BDB 91FF | POP ZH\r
+| 000BDC 91EF | POP ZL\r
+| | \r
+| 000BDD 9150 0165 | LDS D,DATE_DAY\r
+| 000BDF 1759 | CP D,E\r
+| 000BE0 F070 | BRLO TIM2_DAY\r
+| | \r
+| 000BE1 9150 0166 | LDS D,DATE_MONTH\r
+| 000BE3 305C | CPI D,12\r
+| 000BE4 F030 | BRLO TIM2_MONTH\r
+| | \r
+| 000BE5 9150 0167 | LDS D,DATE_YEAR\r
+| 000BE7 9553 | INC D\r
+| 000BE8 9350 0167 | STS DATE_YEAR,D\r
+| 000BEA 2755 | CLR D\r
+| | TIM2_MONTH:\r
+| 000BEB 9553 | INC D\r
+| 000BEC 9350 0166 | STS DATE_MONTH,D\r
+| 000BEE 2755 | CLR D\r
+| | TIM2_DAY:\r
+| 000BEF 9553 | INC D\r
+| 000BF0 9350 0165 | STS DATE_DAY,D\r
+| 000BF2 2755 | CLR D\r
+| | TIM2_HOUR:\r
+| 000BF3 9350 0164 | STS TIME_HOUR,D\r
+| 000BF5 2755 | CLR D\r
+| | TIM2_MINUTE:\r
+| 000BF6 9350 0163 | STS TIME_MINUTE,D\r
+| 000BF8 2755 | CLR D\r
+| | TIM2_SECOND:\r
+| 000BF9 9350 0162 | STS TIME_SECOND,D\r
+| | \r
+| | TIM2_SEND:\r
+| 000BFB 2D55 | MOV D,TX_COUNT\r
+| 000BFC 3159 | CPI D,TX_SIZE-7\r
+| 000BFD F4C0 | BRSH TIM2_SEND_SKIP\r
+| | \r
+| 000BFE 931F | PUSH A\r
+| 000BFF E11B | LDI A,$1B\r
+| 000C00 D8A4 | RCALL TX_CHAR\r
+| 000C01 E514 | LDI A,'T'\r
+| 000C02 D8A2 | RCALL TX_CHAR\r
+| | ; LDS A,VCCL\r
+| | ; RCALL TX_CHAR\r
+| | ; LDS A,VCCH\r
+| | ; RCALL TX_CHAR\r
+| | ; LDS A,VEEL\r
+| | ; RCALL TX_CHAR\r
+| | ; LDS A,VEEH\r
+| | ; RCALL TX_CHAR\r
+| | ; LDI A,$0D\r
+| | ; RCALL TX_CHAR\r
+| 000C03 9110 0164 | LDS A,TIME_HOUR\r
+| 000C05 DFAD | RCALL GO_TX_CHAR\r
+| 000C06 9110 0163 | LDS A,TIME_MINUTE\r
+| 000C08 DFAA | RCALL GO_TX_CHAR\r
+| 000C09 9110 0162 | LDS A,TIME_SECOND\r
+| 000C0B DFA7 | RCALL GO_TX_CHAR\r
+| 000C0C 9110 0166 | LDS A,DATE_MONTH\r
+| 000C0E DFA4 | RCALL GO_TX_CHAR\r
+| 000C0F 9110 0165 | LDS A,DATE_DAY\r
+| 000C11 DFA1 | RCALL GO_TX_CHAR\r
+| 000C12 9110 0167 | LDS A,DATE_YEAR\r
+| 000C14 DF9E | RCALL GO_TX_CHAR\r
+| 000C15 911F | POP A\r
+| | \r
+| | TIM2_SEND_SKIP:\r
+| 000C16 CF95 | RJMP TIM2_END\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | MONTH_TABLE:\r
+| 000C17 | .DB 31,28,31,30,31,30,31,31,30,31,30,31\r
+| 000C19 1F1E 1F1F |\r
+| 000C1B 1E1F 1E1F |\r
+| | \r
+| | ; 1ST BYTE = LED\r
+| | ; 2ND BYTE = PHOTO\r
+| | ; 3RD BYTE = TOUCH CHANNEL\r
+| | \r
+| | SCAN_TBL:\r
+| 000C1D | .DB $F0,$34,$00,$00,$E8,$34,$01,$00,$F0,$33,$01,$00,$E8,$33,$02,$00\r
+| 000C1F E834 0100 |\r
+| 000C21 F033 0100 |\r
+| 000C23 E833 0200 |\r
+| 000C25 | .DB $E4,$33,$03,$00,$E8,$32,$03,$00,$E4,$32,$04,$00,$E2,$32,$05,$00\r
+| 000C27 E832 0300 |\r
+| 000C29 E432 0400 |\r
+| 000C2B E232 0500 |\r
+| 000C2D | .DB $E4,$31,$05,$00,$E2,$31,$06,$00,$E1,$31,$07,$00,$E2,$30,$07,$00\r
+| 000C2F E231 0600 |\r
+| 000C31 E131 0700 |\r
+| 000C33 E230 0700 |\r
+| 000C35 | .DB $E1,$30,$08,$00,$C1,$2A,$00,$00,$C2,$2A,$01,$00,$C1,$2B,$01,$00\r
+| 000C37 C12A 0000 |\r
+| 000C39 C22A 0100 |\r
+| 000C3B C12B 0100 |\r
+| 000C3D | .DB $C2,$2B,$02,$00,$C4,$2B,$03,$00,$C2,$2C,$03,$00,$C4,$2C,$04,$00\r
+| 000C3F C42B 0300 |\r
+| 000C41 C22C 0300 |\r
+| 000C43 C42C 0400 |\r
+| 000C45 | .DB $C8,$2C,$05,$00,$C4,$18,$05,$00,$C8,$18,$06,$00,$D0,$18,$07,$00\r
+| 000C47 C418 0500 |\r
+| 000C49 C818 0600 |\r
+| 000C4B D018 0700 |\r
+| 000C4D | .DB $C8,$19,$07,$00,$D0,$19,$08,$00,$A1,$19,$09,$00,$D0,$1A,$09,$00\r
+| 000C4F D019 0800 |\r
+| 000C51 A119 0900 |\r
+| 000C53 D01A 0900 |\r
+| 000C55 | .DB $A1,$1A,$0A,$00,$A2,$1A,$0B,$00,$A1,$1B,$0B,$00,$A2,$1B,$0C,$00\r
+| 000C57 A21A 0B00 |\r
+| 000C59 A11B 0B00 |\r
+| 000C5B A21B 0C00 |\r
+| 000C5D | .DB $A4,$1B,$0D,$00,$A2,$1C,$0D,$00,$A4,$1C,$0E,$00,$A8,$1C,$0F,$00\r
+| 000C5F A21C 0D00 |\r
+| 000C61 A41C 0E00 |\r
+| 000C63 A81C 0F00 |\r
+| 000C65 | .DB $A4,$1D,$0F,$00,$A8,$1D,$10,$00,$B0,$1D,$11,$00,$A8,$1E,$11,$00\r
+| 000C67 A81D 1000 |\r
+| 000C69 B01D 1100 |\r
+| 000C6B A81E 1100 |\r
+| 000C6D | .DB $B0,$1E,$12,$00,$61,$1E,$13,$00,$B0,$1F,$13,$00,$61,$1F,$14,$00\r
+| 000C6F 611E 1300 |\r
+| 000C71 B01F 1300 |\r
+| 000C73 611F 1400 |\r
+| 000C75 | .DB $62,$1F,$15,$00,$61,$28,$15,$00,$62,$28,$16,$00,$64,$28,$17,$00\r
+| 000C77 6128 1500 |\r
+| 000C79 6228 1600 |\r
+| 000C7B 6428 1700 |\r
+| 000C7D | .DB $62,$29,$17,$00,$64,$29,$18,$00\r
+| 000C7F 6429 1800 |\r
+| | \r
+| | RTN_CODE:\r
+| 000C81 | .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r
+| 000C83 0000 0000 |\r
+| 000C85 0000 0000 |\r
+| 000C87 0000 0000 |\r
+| 000C89 | .DB $00,$00,$00,$00,$00,$00,$08,$08,$08,$00,$00,$00,$00,$00,$00,$00\r
+| 000C8B 0000 0808 |\r
+| 000C8D 0800 0000 |\r
+| 000C8F 0000 0000 |\r
+| 000C91 | .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r
+| 000C93 0000 0000 |\r
+| 000C95 0000 0000 |\r
+| 000C97 0000 0000 |\r
+| 000C99 | .DB $00,$00,$7E,$00,$31,$00,$32,$00,$33,$00,$34,$00,$35,$00,$36,$00\r
+| 000C9B 3100 3200 |\r
+| 000C9D 3300 3400 |\r
+| 000C9F 3500 3600 |\r
+| 000CA1 | .DB $37,$00,$38,$00,$39,$00,$30,$00,$2D,$00,$3D,$00,$00,$00,$00,$00\r
+| 000CA3 3900 3000 |\r
+| 000CA5 2D00 3D00 |\r
+| 000CA7 0000 0000 |\r
+| 000CA9 | .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r
+| 000CAB 0000 0000 |\r
+| 000CAD 0000 0000 |\r
+| 000CAF 0000 0000 |\r
+| 000CB1 | .DB $00,$00,$00,$00,$51,$00,$57,$00,$45,$00,$52,$00,$54,$00,$59,$00\r
+| 000CB3 5100 5700 |\r
+| 000CB5 4500 5200 |\r
+| 000CB7 5400 5900 |\r
+| 000CB9 | .DB $55,$00,$49,$00,$4F,$00,$50,$00,$5B,$00,$5D,$00,$5C,$00,$00,$00\r
+| 000CBB 4F00 5000 |\r
+| 000CBD 5B00 5D00 |\r
+| 000CBF 5C00 0000 |\r
+| 000CC1 | .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r
+| 000CC3 0000 0000 |\r
+| 000CC5 0000 0000 |\r
+| 000CC7 0000 0000 |\r
+| 000CC9 | .DB $00,$00,$00,$00,$00,$00,$41,$00,$53,$00,$44,$00,$46,$00,$47,$00\r
+| 000CCB 0000 4100 |\r
+| 000CCD 5300 4400 |\r
+| 000CCF 4600 4700 |\r
+| 000CD1 | .DB $48,$00,$4A,$00,$4B,$00,$4C,$00,$3B,$00,$27,$00,$0D,$0D,$0D,$00\r
+| 000CD3 4B00 4C00 |\r
+| 000CD5 3B00 2700 |\r
+| 000CD7 0D0D 0D00 |\r
+| 000CD9 | .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r
+| 000CDB 0000 0000 |\r
+| 000CDD 0000 0000 |\r
+| 000CDF 0000 0000 |\r
+| 000CE1 | .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$5A,$00,$58,$00,$43,$00\r
+| 000CE3 0000 0000 |\r
+| 000CE5 0000 5A00 |\r
+| 000CE7 5800 4300 |\r
+| 000CE9 | .DB $56,$00,$42,$00,$4E,$00,$4D,$00,$2C,$00,$2E,$00,$2F,$00,$00,$00\r
+| 000CEB 4E00 4D00 |\r
+| 000CED 2C00 2E00 |\r
+| 000CEF 2F00 0000 |\r
+| 000CF1 0000 | .DB $00,$00\r
+| | RTN_CODE_END:\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | CHSET00:\r
+| | .INCLUDE "CHSET00.INC"\r
+| | ; chset00.inc generated from chset00.win, do not edit!\r
+| | \r
+| 000CF2 | .db $46,$32,$34,$44,$30,$33,$31,$39,$30,$33,$31,$32,$31,$37,$30,$39\r
+| 000CF4 3033 3139 |\r
+| 000CF6 3033 3132 |\r
+| 000CF8 3137 3039 |\r
+| 000CFA | .db $4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000CFC 4C03 4C03 |\r
+| 000CFE 4C03 4C03 |\r
+| 000D00 4C03 4C03 |\r
+| 000D02 | .db $4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000D04 4C03 4C03 |\r
+| 000D06 4C03 4C03 |\r
+| 000D08 4C03 4C03 |\r
+| 000D0A | .db $4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000D0C 4C03 4C03 |\r
+| 000D0E 4C03 4C03 |\r
+| 000D10 4C03 4C03 |\r
+| 000D12 | .db $4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000D14 4C03 4C03 |\r
+| 000D16 4C03 4C03 |\r
+| 000D18 4C03 4C03 |\r
+| 000D1A | .db $00,$01,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000D1C 4C03 4C03 |\r
+| 000D1E 4C03 4C03 |\r
+| 000D20 4C03 4C03 |\r
+| 000D22 | .db $4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$03,$01,$4c,$03,$4c,$03\r
+| 000D24 4C03 4C03 |\r
+| 000D26 4C03 0301 |\r
+| 000D28 4C03 4C03 |\r
+| 000D2A | .db $06,$01,$0f,$01,$18,$01,$21,$01,$2a,$01,$33,$01,$3c,$01,$45,$01\r
+| 000D2C 1801 2101 |\r
+| 000D2E 2A01 3301 |\r
+| 000D30 3C01 4501 |\r
+| 000D32 | .db $4e,$01,$57,$01,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000D34 4C03 4C03 |\r
+| 000D36 4C03 4C03 |\r
+| 000D38 4C03 4C03 |\r
+| 000D3A | .db $4c,$03,$60,$01,$69,$01,$72,$01,$7b,$01,$84,$01,$8d,$01,$96,$01\r
+| 000D3C 6901 7201 |\r
+| 000D3E 7B01 8401 |\r
+| 000D40 8D01 9601 |\r
+| 000D42 | .db $9f,$01,$a9,$01,$b2,$01,$bb,$01,$c4,$01,$cd,$01,$d6,$01,$df,$01\r
+| 000D44 B201 BB01 |\r
+| 000D46 C401 CD01 |\r
+| 000D48 D601 DF01 |\r
+| 000D4A | .db $e8,$01,$f1,$01,$08,$02,$11,$02,$1a,$02,$23,$02,$2c,$02,$35,$02\r
+| 000D4C 0802 1102 |\r
+| 000D4E 1A02 2302 |\r
+| 000D50 2C02 3502 |\r
+| 000D52 | .db $3e,$02,$47,$02,$50,$02,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000D54 5002 4C03 |\r
+| 000D56 4C03 4C03 |\r
+| 000D58 4C03 4C03 |\r
+| 000D5A | .db $4c,$03,$59,$02,$62,$02,$6b,$02,$74,$02,$7d,$02,$86,$02,$8f,$02\r
+| 000D5C 6202 6B02 |\r
+| 000D5E 7402 7D02 |\r
+| 000D60 8602 8F02 |\r
+| 000D62 | .db $99,$02,$a3,$02,$ad,$02,$b8,$02,$c2,$02,$cb,$02,$d4,$02,$dd,$02\r
+| 000D64 AD02 B802 |\r
+| 000D66 C202 CB02 |\r
+| 000D68 D402 DD02 |\r
+| 000D6A | .db $e6,$02,$f0,$02,$fc,$02,$03,$03,$0c,$03,$15,$03,$1e,$03,$27,$03\r
+| 000D6C FC02 0303 |\r
+| 000D6E 0C03 1503 |\r
+| 000D70 1E03 2703 |\r
+| 000D72 | .db $30,$03,$39,$03,$43,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03,$4c,$03\r
+| 000D74 4303 4C03 |\r
+| 000D76 4C03 4C03 |\r
+| 000D78 4C03 4C03 |\r
+| 000D7A | .db $00,$03,$06,$61,$01,$f8,$01,$07,$70,$88,$98,$a8,$c8,$88,$70,$01\r
+| 000D7C 01F8 0107 |\r
+| 000D7E 7088 98A8 |\r
+| 000D80 C888 7001 |\r
+| 000D82 | .db $07,$20,$60,$20,$20,$20,$20,$70,$01,$07,$70,$88,$08,$10,$20,$40\r
+| 000D84 2020 2070 |\r
+| 000D86 0107 7088 |\r
+| 000D88 0810 2040 |\r
+| 000D8A | .db $f8,$01,$07,$f8,$10,$20,$10,$08,$88,$70,$01,$07,$10,$30,$50,$90\r
+| 000D8C 1020 1008 |\r
+| 000D8E 8870 0107 |\r
+| 000D90 1030 5090 |\r
+| 000D92 | .db $f8,$10,$10,$01,$07,$f8,$80,$f0,$08,$08,$88,$70,$01,$07,$30,$40\r
+| 000D94 07F8 80F0 |\r
+| 000D96 0808 8870 |\r
+| 000D98 0107 3040 |\r
+| 000D9A | .db $80,$f0,$88,$88,$70,$01,$07,$f8,$08,$10,$20,$40,$40,$40,$01,$07\r
+| 000D9C 7001 07F8 |\r
+| 000D9E 0810 2040 |\r
+| 000DA0 4040 0107 |\r
+| 000DA2 | .db $70,$88,$88,$70,$88,$88,$70,$01,$07,$70,$88,$88,$78,$08,$10,$60\r
+| 000DA4 8888 7001 |\r
+| 000DA6 0770 8888 |\r
+| 000DA8 7808 1060 |\r
+| 000DAA | .db $01,$07,$70,$88,$88,$88,$f8,$88,$88,$01,$07,$f0,$88,$88,$f0,$88\r
+| 000DAC 8888 F888 |\r
+| 000DAE 8801 07F0 |\r
+| 000DB0 8888 F088 |\r
+| 000DB2 | .db $88,$f0,$01,$07,$70,$88,$80,$80,$80,$88,$70,$01,$07,$e0,$90,$88\r
+| 000DB4 7088 8080 |\r
+| 000DB6 8088 7001 |\r
+| 000DB8 07E0 9088 |\r
+| 000DBA | .db $88,$88,$90,$e0,$01,$07,$f8,$80,$80,$f0,$80,$80,$f8,$01,$07,$f8\r
+| 000DBC 0107 F880 |\r
+| 000DBE 80F0 8080 |\r
+| 000DC0 F801 07F8 |\r
+| 000DC2 | .db $80,$80,$f0,$80,$80,$80,$01,$07,$70,$88,$80,$b8,$88,$88,$78,$01\r
+| 000DC4 8080 0107 |\r
+| 000DC6 7088 80B8 |\r
+| 000DC8 8888 7801 |\r
+| 000DCA | .db $07,$88,$88,$88,$f8,$88,$88,$88,$02,$21,$07,$80,$80,$80,$80,$80\r
+| 000DCC F888 8888 |\r
+| 000DCE 0221 0780 |\r
+| 000DD0 8080 8080 |\r
+| 000DD2 | .db $80,$80,$01,$07,$08,$08,$08,$08,$08,$88,$70,$01,$07,$88,$90,$a0\r
+| 000DD4 0808 0808 |\r
+| 000DD6 0888 7001 |\r
+| 000DD8 0788 90A0 |\r
+| 000DDA | .db $c0,$a0,$90,$88,$01,$07,$80,$80,$80,$80,$80,$80,$f8,$01,$07,$88\r
+| 000DDC 0107 8080 |\r
+| 000DDE 8080 8080 |\r
+| 000DE0 F801 0788 |\r
+| 000DE2 | .db $d8,$a8,$a8,$88,$88,$88,$01,$07,$88,$88,$c8,$a8,$98,$88,$88,$01\r
+| 000DE4 8888 0107 |\r
+| 000DE6 8888 C8A8 |\r
+| 000DE8 9888 8801 |\r
+| 000DEA | .db $07,$70,$88,$88,$88,$88,$88,$70,$01,$07,$f0,$88,$88,$f0,$80,$80\r
+| 000DEC 8888 8870 |\r
+| 000DEE 0107 F088 |\r
+| 000DF0 88F0 8080 |\r
+| 000DF2 | .db $80,$01,$07,$70,$88,$88,$88,$a8,$90,$68,$4c,$03,$4c,$03,$4c,$03\r
+| 000DF4 8888 88A8 |\r
+| 000DF6 9068 4C03 |\r
+| 000DF8 4C03 4C03 |\r
+| 000DFA | .db $06,$08,$01,$01,$4f,$00,$65,$03,$01,$07,$f0,$88,$88,$f0,$a0,$90\r
+| 000DFC 4F00 6503 |\r
+| 000DFE 0107 F088 |\r
+| 000E00 88F0 A090 |\r
+| 000E02 | .db $88,$01,$07,$70,$88,$80,$70,$08,$88,$70,$01,$07,$f8,$20,$20,$20\r
+| 000E04 8880 7008 |\r
+| 000E06 8870 0107 |\r
+| 000E08 F820 2020 |\r
+| 000E0A | .db $20,$20,$20,$01,$07,$88,$88,$88,$88,$88,$88,$70,$01,$07,$88,$88\r
+| 000E0C 0788 8888 |\r
+| 000E0E 8888 8870 |\r
+| 000E10 0107 8888 |\r
+| 000E12 | .db $88,$88,$88,$50,$20,$01,$07,$88,$88,$88,$a8,$a8,$a8,$50,$01,$07\r
+| 000E14 2001 0788 |\r
+| 000E16 8888 A8A8 |\r
+| 000E18 A850 0107 |\r
+| 000E1A | .db $88,$88,$50,$20,$50,$88,$88,$01,$07,$88,$88,$88,$50,$20,$20,$20\r
+| 000E1C 5088 8801 |\r
+| 000E1E 0788 8888 |\r
+| 000E20 5020 2020 |\r
+| 000E22 | .db $01,$07,$f8,$08,$10,$20,$40,$80,$f8,$01,$07,$00,$00,$70,$08,$78\r
+| 000E24 1020 4080 |\r
+| 000E26 F801 0700 |\r
+| 000E28 0070 0878 |\r
+| 000E2A | .db $88,$78,$01,$07,$80,$80,$f0,$88,$88,$88,$f0,$01,$07,$00,$00,$78\r
+| 000E2C 8080 F088 |\r
+| 000E2E 8888 F001 |\r
+| 000E30 0700 0078 |\r
+| 000E32 | .db $80,$80,$80,$78,$01,$07,$08,$08,$78,$88,$88,$88,$78,$01,$07,$00\r
+| 000E34 0107 0808 |\r
+| 000E36 7888 8888 |\r
+| 000E38 7801 0700 |\r
+| 000E3A | .db $00,$70,$88,$f8,$80,$70,$01,$07,$18,$20,$f8,$20,$20,$20,$20,$01\r
+| 000E3C 8070 0107 |\r
+| 000E3E 1820 F820 |\r
+| 000E40 2020 2001 |\r
+| 000E42 | .db $08,$00,$00,$78,$88,$88,$78,$08,$70,$01,$07,$80,$80,$b0,$c8,$88\r
+| 000E44 8888 7808 |\r
+| 000E46 7001 0780 |\r
+| 000E48 80B0 C888 |\r
+| 000E4A | .db $88,$88,$02,$21,$07,$80,$00,$80,$80,$80,$80,$80,$05,$21,$08,$10\r
+| 000E4C 0780 0080 |\r
+| 000E4E 8080 8080 |\r
+| 000E50 0521 0810 |\r
+| 000E52 | .db $00,$10,$10,$10,$10,$90,$60,$05,$21,$07,$80,$80,$90,$a0,$c0,$a0\r
+| 000E54 1090 6005 |\r
+| 000E56 2107 8080 |\r
+| 000E58 90A0 C0A0 |\r
+| 000E5A | .db $90,$03,$21,$07,$c0,$40,$40,$40,$40,$40,$40,$01,$07,$00,$00,$f0\r
+| 000E5C C040 4040 |\r
+| 000E5E 4040 4001 |\r
+| 000E60 0700 00F0 |\r
+| 000E62 | .db $a8,$a8,$a8,$a8,$01,$07,$00,$00,$b0,$c8,$88,$88,$88,$01,$07,$00\r
+| 000E64 0107 0000 |\r
+| 000E66 B0C8 8888 |\r
+| 000E68 8801 0700 |\r
+| 000E6A | .db $00,$70,$88,$88,$88,$70,$01,$08,$00,$00,$f0,$88,$88,$f0,$80,$80\r
+| 000E6C 8870 0108 |\r
+| 000E6E 0000 F088 |\r
+| 000E70 88F0 8080 |\r
+| 000E72 | .db $01,$08,$00,$00,$78,$88,$88,$78,$08,$08,$02,$05,$61,$05,$b0,$c0\r
+| 000E74 7888 8878 |\r
+| 000E76 0808 0205 |\r
+| 000E78 6105 B0C0 |\r
+| 000E7A | .db $80,$80,$80,$01,$07,$00,$00,$78,$80,$70,$08,$f0,$01,$07,$20,$20\r
+| 000E7C 0700 0078 |\r
+| 000E7E 8070 08F0 |\r
+| 000E80 0107 2020 |\r
+| 000E82 | .db $f8,$20,$20,$20,$18,$01,$07,$00,$00,$88,$88,$88,$98,$68,$01,$07\r
+| 000E84 1801 0700 |\r
+| 000E86 0088 8888 |\r
+| 000E88 9868 0107 |\r
+| 000E8A | .db $00,$00,$88,$88,$88,$50,$20,$01,$07,$00,$00,$88,$88,$a8,$a8,$50\r
+| 000E8C 8850 2001 |\r
+| 000E8E 0700 0088 |\r
+| 000E90 88A8 A850 |\r
+| 000E92 | .db $01,$07,$00,$00,$88,$50,$20,$50,$88,$01,$08,$00,$00,$88,$88,$88\r
+| 000E94 8850 2050 |\r
+| 000E96 8801 0800 |\r
+| 000E98 0088 8888 |\r
+| 000E9A | .db $78,$08,$70,$01,$07,$00,$00,$f8,$10,$20,$40,$f8,$01,$07,$f8,$f8\r
+| 000E9C 0700 00F8 |\r
+| 000E9E 1020 40F8 |\r
+| 000EA0 0107 F8F8 |\r
+| 000EA2 F8F8 | .db $f8,$f8,$f8,$f8,$f8,$00\r
+| 000EA4 F800 |\r
+| | \r
+| | \r
+| | CHSET00_END:\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | GET_CLEAR_FRAME_RECT_SIZE:\r
+| 000EA5 9370 0156 | STS RECTNC_X,CURSORX\r
+| 000EA7 9380 0157 | STS RECTNC_Y,CURSORY\r
+| 000EA9 D5D4 | RCALL RX_WAIT\r
+| 000EAA 9310 0158 | STS RECTNC_XX,A\r
+| 000EAC D5D1 | RCALL RX_WAIT\r
+| 000EAD 9310 0159 | STS RECTNC_YY,A\r
+| 000EAF D026 | RCALL CLEAR_FRAME_RECT\r
+| 000EB0 C2E4 | RJMP MAIN_LOOP\r
+| | \r
+| | GET_FRAME_RECT_SIZE:\r
+| 000EB1 9370 0156 | STS RECTNC_X,CURSORX\r
+| 000EB3 9380 0157 | STS RECTNC_Y,CURSORY\r
+| 000EB5 D5C8 | RCALL RX_WAIT\r
+| 000EB6 9310 0158 | STS RECTNC_XX,A\r
+| 000EB8 D5C5 | RCALL RX_WAIT\r
+| 000EB9 9310 0159 | STS RECTNC_YY,A\r
+| 000EBB D02F | RCALL FRAME_RECT\r
+| 000EBC C2D8 | RJMP MAIN_LOOP\r
+| | \r
+| | GET_CLEAR_HALFTONE_RECT_SIZE:\r
+| 000EBD 9370 0152 | STS RECT_X,CURSORX\r
+| 000EBF 9380 0153 | STS RECT_Y,CURSORY\r
+| 000EC1 D5BC | RCALL RX_WAIT\r
+| 000EC2 9310 0154 | STS RECT_XX,A\r
+| 000EC4 D5B9 | RCALL RX_WAIT\r
+| 000EC5 9310 0155 | STS RECT_YY,A\r
+| 000EC7 D078 | RCALL CLEAR_HALFTONE_RECT\r
+| 000EC8 C2CC | RJMP MAIN_LOOP\r
+| | \r
+| | GET_HALFTONE_RECT_SIZE:\r
+| 000EC9 9370 0152 | STS RECT_X,CURSORX\r
+| 000ECB 9380 0153 | STS RECT_Y,CURSORY\r
+| 000ECD D5B0 | RCALL RX_WAIT\r
+| 000ECE 9310 0154 | STS RECT_XX,A\r
+| 000ED0 D5AD | RCALL RX_WAIT\r
+| 000ED1 9310 0155 | STS RECT_YY,A\r
+| 000ED3 D071 | RCALL HALFTONE_RECT\r
+| 000ED4 C2C0 | RJMP MAIN_LOOP\r
+| | \r
+| 000ED5 9508 | NO_GOX: RET\r
+| | \r
+| | CLEAR_FRAME_RECT:\r
+| 000ED6 9100 0156 | LDS F,RECTNC_X\r
+| 000ED8 9300 0152 | STS RECT_X,F\r
+| 000EDA 9100 0157 | LDS F,RECTNC_Y\r
+| 000EDC 9300 0153 | STS RECT_Y,F\r
+| 000EDE 9100 0158 | LDS F,RECTNC_XX\r
+| 000EE0 9300 0154 | STS RECT_XX,F\r
+| 000EE2 9100 0159 | LDS F,RECTNC_YY\r
+| 000EE4 9300 0155 | STS RECT_YY,F\r
+| | \r
+| 000EE6 E002 | LDI F,$02\r
+| 000EE7 2AB0 | OR FLAGS,F\r
+| | \r
+| 000EE8 D724 | RCALL DRAW_RECT\r
+| | \r
+| 000EE9 EF0D | LDI F,$FD\r
+| 000EEA 22B0 | AND FLAGS,F\r
+| | \r
+| | FRAME_RECT:\r
+| 000EEB 9100 0158 | LDS F,RECTNC_XX\r
+| 000EED 950A | DEC F\r
+| 000EEE 3002 | CPI F,2\r
+| 000EEF F328 | BRLO NO_GOX\r
+| 000EF0 9100 0159 | LDS F,RECTNC_YY\r
+| 000EF2 3003 | CPI F,3\r
+| 000EF3 F308 | BRLO NO_GOX\r
+| | \r
+| 000EF4 9100 0156 | LDS F,RECTNC_X\r
+| 000EF6 9300 0152 | STS RECT_X,F\r
+| 000EF8 9100 0157 | LDS F,RECTNC_Y\r
+| 000EFA 9300 0153 | STS RECT_Y,F\r
+| 000EFC 9100 0158 | LDS F,RECTNC_XX\r
+| 000EFE 9300 0154 | STS RECT_XX,F\r
+| 000F00 E001 | LDI F,$01\r
+| 000F01 9300 0155 | STS RECT_YY,F\r
+| 000F03 D709 | RCALL DRAW_RECT\r
+| | \r
+| 000F04 9100 0156 | LDS F,RECTNC_X\r
+| 000F06 9300 0152 | STS RECT_X,F\r
+| 000F08 9100 0157 | LDS F,RECTNC_Y\r
+| 000F0A 9503 | INC F\r
+| 000F0B 9300 0153 | STS RECT_Y,F\r
+| 000F0D 9100 0159 | LDS F,RECTNC_YY\r
+| 000F0F 5002 | SUBI F,2\r
+| 000F10 9300 0155 | STS RECT_YY,F\r
+| 000F12 E001 | LDI F,$01\r
+| 000F13 9300 0154 | STS RECT_XX,F\r
+| 000F15 D6F7 | RCALL DRAW_RECT\r
+| | \r
+| 000F16 9080 0158 | LDS X_SIZE,RECTNC_XX\r
+| 000F18 9100 0156 | LDS F,RECTNC_X\r
+| 000F1A 0D08 | ADD F,X_SIZE\r
+| 000F1B 950A | DEC F\r
+| 000F1C 9300 0152 | STS RECT_X,F\r
+| 000F1E E001 | LDI F,$01\r
+| 000F1F 9300 0154 | STS RECT_XX,F\r
+| 000F21 9100 0157 | LDS F,RECTNC_Y\r
+| 000F23 9503 | INC F\r
+| 000F24 9300 0153 | STS RECT_Y,F\r
+| 000F26 9100 0159 | LDS F,RECTNC_YY\r
+| 000F28 5002 | SUBI F,2\r
+| 000F29 9300 0155 | STS RECT_YY,F\r
+| 000F2B D6E1 | RCALL DRAW_RECT\r
+| | \r
+| 000F2C 9100 0156 | LDS F,RECTNC_X\r
+| 000F2E 9300 0152 | STS RECT_X,F\r
+| 000F30 9100 0158 | LDS F,RECTNC_XX\r
+| 000F32 9300 0154 | STS RECT_XX,F\r
+| 000F34 9070 0159 | LDS Y_SIZE,RECTNC_YY\r
+| 000F36 9100 0157 | LDS F,RECTNC_Y\r
+| 000F38 0D07 | ADD F,Y_SIZE\r
+| 000F39 950A | DEC F\r
+| 000F3A 9300 0153 | STS RECT_Y,F\r
+| 000F3C E001 | LDI F,$01\r
+| 000F3D 9300 0155 | STS RECT_YY,F\r
+| 000F3F C6CD | RJMP DRAW_RECT\r
+| | \r
+| | CLEAR_HALFTONE_RECT:\r
+| | ; LDS F,RECTNC_X\r
+| | ; STS RECT_X,F\r
+| | ; LDS F,RECTNC_Y\r
+| | ; STS RECT_Y,F\r
+| | ; LDS F,RECTNC_XX\r
+| | ; STS RECT_XX,F\r
+| | ; LDS F,RECTNC_YY\r
+| | ; STS RECT_YY,F\r
+| | \r
+| 000F40 E002 | LDI F,$02\r
+| 000F41 2AB0 | OR FLAGS,F\r
+| | \r
+| 000F42 D6CA | RCALL DRAW_RECT\r
+| | \r
+| 000F43 EF0D | LDI F,$FD\r
+| 000F44 22B0 | AND FLAGS,F\r
+| | \r
+| | HALFTONE_RECT:\r
+| 000F45 9478 | SEI\r
+| 000F46 9090 0153 | LDS LINE_CNT,RECT_Y\r
+| 000F48 9160 0152 | LDS XPIXEL,RECT_X\r
+| 000F4A D802 | RCALL CALCULATE_XBYTE\r
+| 000F4B 9360 0102 | STS XPIXEL_SAV,XPIXEL\r
+| 000F4D 92A0 0100 | STS XBYTE_SAV,XBYTE\r
+| 000F4F 9070 0155 | LDS Y_SIZE,RECT_YY\r
+| 000F51 27CC | CLR YL\r
+| 000F52 2DD9 | MOV YH,LINE_CNT\r
+| 000F53 E515 | LDI A,$55\r
+| 000F54 FFD0 | SBRS YH,0\r
+| 000F55 EA1A | LDI A,$AA\r
+| 000F56 2E01 | MOV PATTERN,A\r
+| 000F57 95D6 | LSR YH\r
+| 000F58 95C7 | ROR YL\r
+| 000F59 95D6 | LSR YH\r
+| 000F5A 95C7 | ROR YL\r
+| 000F5B 5ED0 | SUBI YH,HIGH(-DRAW_DSPRAM) ; DRAW INTO DRAWING BUFFER\r
+| 000F5C E118 | LDI A,HIGH(DRAW_DSPRAM>>6)\r
+| 000F5D DC2F | RCALL SELECT_XPAGE\r
+| 000F5E C007 | RJMP X03A3\r
+| 000F5F 5CC0 | X039A: SUBI YL,LOW(-$40)\r
+| 000F60 4FDF | SBCI YH,HIGH(-$40)\r
+| 000F61 9493 | INC LINE_CNT\r
+| 000F62 9160 0102 | LDS XPIXEL,XPIXEL_SAV\r
+| 000F64 90A0 0100 | LDS XBYTE,XBYTE_SAV\r
+| 000F66 2AAC | X03A3: OR XBYTE,YL\r
+| 000F67 EF1F | LDI A,$FF\r
+| 000F68 9080 0154 | LDS X_SIZE,RECT_XX\r
+| 000F6A E000 | LDI F,$00\r
+| 000F6B 1680 | CP X_SIZE,F\r
+| 000F6C F041 | BREQ X03B0\r
+| 000F6D E008 | LDI F,$08\r
+| 000F6E 1680 | CP X_SIZE,F\r
+| 000F6F F0C8 | BRLO X03C2\r
+| 000F70 2366 | TST XPIXEL\r
+| 000F71 F019 | BREQ X03B0\r
+| 000F72 9516 | X03AD: LSR A\r
+| 000F73 956A | DEC XPIXEL\r
+| 000F74 F7E9 | BRNE X03AD\r
+| 000F75 2110 | X03B0: AND A,PATTERN\r
+| 000F76 D7FE | RCALL WR_DISP_MEM\r
+| 000F77 E008 | LDI F,$08\r
+| 000F78 9110 0102 | LDS A,XPIXEL_SAV\r
+| 000F7A 1B01 | SUB F,A\r
+| 000F7B 1A80 | SUB X_SIZE,F\r
+| 000F7C 94A3 | INC XBYTE\r
+| 000F7D EF1F | LDI A,$FF\r
+| 000F7E E008 | X03B8: LDI F,$08\r
+| 000F7F 1680 | CP X_SIZE,F\r
+| 000F80 F040 | BRLO X03C2\r
+| 000F81 F0C1 | BREQ X03D2\r
+| 000F82 2110 | AND A,PATTERN\r
+| 000F83 D7F1 | RCALL WR_DISP_MEM\r
+| 000F84 EF1F | LDI A,$FF\r
+| 000F85 E008 | LDI F,$08\r
+| 000F86 1A80 | SUB X_SIZE,F\r
+| 000F87 94A3 | INC XBYTE\r
+| 000F88 CFF5 | RJMP X03B8\r
+| 000F89 2088 | X03C2: TST X_SIZE\r
+| 000F8A F089 | BREQ X03D3\r
+| 000F8B 9516 | X03C4: LSR A\r
+| 000F8C 948A | DEC X_SIZE\r
+| 000F8D F7E9 | BRNE X03C4\r
+| 000F8E 9510 | COM A\r
+| 000F8F 2366 | TST XPIXEL\r
+| 000F90 F049 | BREQ X03D2\r
+| 000F91 2722 | CLR B\r
+| 000F92 9516 | X03CB: LSR A\r
+| 000F93 9527 | ROR B\r
+| 000F94 956A | DEC XPIXEL\r
+| 000F95 F7E1 | BRNE X03CB\r
+| 000F96 2110 | AND A,PATTERN\r
+| 000F97 D7DD | RCALL WR_DISP_MEM\r
+| 000F98 94A3 | INC XBYTE\r
+| 000F99 2F12 | MOV A,B\r
+| 000F9A 2110 | X03D2: AND A,PATTERN\r
+| 000F9B D7D9 | RCALL WR_DISP_MEM\r
+| 000F9C 9400 | X03D3: COM PATTERN\r
+| 000F9D D616 | RCALL NICK_SUB1\r
+| 000F9E 947A | DEC Y_SIZE\r
+| 000F9F 2700 | CLR F\r
+| 000FA0 1270 | CPSE Y_SIZE,F\r
+| 000FA1 CFBD | RJMP X039A\r
+| 000FA2 9508 | RET\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | .ORG $1000\r
+| | \r
+tsv3.asm:3705: Warning : Flash size exceeded by 1 word(s)\r
+| 001000 0241 | .DW $4102 ; SELECT ADDRESS COMMAND\r
+| | \r
+| | ; -----------------------------------------------------------------------------\r
+| | \r
+| | \r
++------------------+-----------------------------------------------------------+\r
+\r
+Errors : 0\r
+Warnings : 2\r
+Code : 4097\r
+Rom : 4\r
+Data : 279\r
+Unused Code : 93\r
+Unused Rom : 0\r
--- /dev/null
+# GCC-AVR standard makefile\r
+# Based on AVRfreaks.net January 2000 sample makefile\r
+# For compilation under Microsoft Windows environment\r
+\r
+# Variables definitions\r
+ CC = avr-gcc\r
+ AS = avr-gcc -x assembler-with-cpp \r
+ RM = rm -f\r
+ RN = mv\r
+ BIN = avr-objcopy\r
+ SIZE = avr-size\r
+ INCDIR = .\r
+ LIBDIR = avr/lib\r
+ SHELL = sh.exe\r
+\r
+# Output format (srec or ihex, avrobj is always created)\r
+ FORMAT = ihex \r
+\r
+# Project specific object files\r
+ OBJ = $(ASRC:.s=.o) $(SRC:.c=.o) \r
+ CPFLAGS += -mmcu=$(MCU)\r
+ ASFLAGS += -mmcu=$(MCU)\r
+ LDFLAGS += -mmcu=$(MCU)\r
+ \r
+# Define make process\r
+\r
+#all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok \r
+all: $(TRG).s $(TRG).elf $(TRG).hex $(TRG).eep $(TRG).ok\r
+%.o : %.c \r
+ $(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.s : %.c\r
+ $(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.o : %.s\r
+ $(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@\r
+%.elf: $(OBJ)\r
+ $(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@\r
+%.obj: %.elf\r
+ $(BIN) -O avrobj -R .eeprom $< $@\r
+%.rom: %.elf\r
+ $(BIN) -O $(FORMAT) -R .eeprom $< $@\r
+#%.eep: %.elf\r
+# $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.eep: %.elf\r
+ $(BIN) -j .eeprom --set-section-flags .eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.hex: %.elf\r
+ $(BIN) -O ihex $< $@\r
+\r
+# No error message if successfully compiled\r
+%ok:\r
+ @echo "Errors: none" \r
+\r
+# Clean up directory\r
+clean:\r
+ $(RM) $(OBJ)\r
+ $(RM) $(SRC:.c=.s)\r
+ $(RM) $(SRC:.c=.lst)\r
+ $(RM) $(TRG).map\r
+ $(RM) $(TRG).elf\r
+\r
+ $(RM) $(TRG).obj\r
+ $(RM) $(TRG).a90\r
+ $(RM) $(TRG).hex \r
+ $(RM) *.bak\r
+ $(RM) *.log\r
+ \r
+size:\r
+ $(SIZE) $(TRG).elf\r
+ \r
--- /dev/null
+# GCC-AVR standard makefile\r
+# Based on AVRfreaks.net January 2000 sample makefile\r
+# For compilation under Microsoft Windows environment\r
+\r
+# Variables definitions\r
+ CC = avr-gcc\r
+ AS = avr-gcc -x assembler-with-cpp \r
+ RM = rm -f\r
+ RN = mv\r
+ BIN = avr-objcopy\r
+ SIZE = avr-size\r
+ INCDIR = .\r
+ LIBDIR = avr/lib\r
+ SHELL = sh.exe\r
+\r
+# Output format (srec or ihex, avrobj is always created)\r
+ FORMAT = ihex \r
+\r
+# Project specific object files\r
+ OBJ = $(ASRC:.s=.o) $(SRC:.c=.o) \r
+ CPFLAGS += -mmcu=$(MCU)\r
+ ASFLAGS += -mmcu=$(MCU)\r
+ LDFLAGS += -mmcu=$(MCU)\r
+ \r
+# Define make process\r
+\r
+#all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok \r
+all: $(TRG).elf $(TRG).hex $(TRG).eep $(TRG).ok\r
+%.o : %.c \r
+ $(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.s : %.c\r
+ $(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.o : %.s\r
+ $(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@\r
+%.elf: $(OBJ)\r
+ $(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@\r
+%.obj: %.elf\r
+ $(BIN) -O avrobj -R .eeprom $< $@\r
+%.rom: %.elf\r
+ $(BIN) -O $(FORMAT) -R .eeprom $< $@\r
+#%.eep: %.elf\r
+# $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.eep: %.elf\r
+ $(BIN) -j .eeprom --set-section-flags .eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.hex: %.elf\r
+ $(BIN) -O ihex $< $@\r
+\r
+# No error message if successfully compiled\r
+%ok:\r
+ @echo "Errors: none" \r
+\r
+# Clean up directory\r
+clean:\r
+ $(RM) $(OBJ)\r
+ $(RM) $(SRC:.c=.s)\r
+ $(RM) $(SRC:.c=.lst)\r
+ $(RM) $(TRG).map\r
+ $(RM) $(TRG).elf\r
+\r
+ $(RM) $(TRG).obj\r
+ $(RM) $(TRG).a90\r
+ $(RM) $(TRG).hex \r
+ $(RM) *.bak\r
+ $(RM) *.log\r
+ \r
+size:\r
+ $(SIZE) $(TRG).elf\r
+ \r
--- /dev/null
+/* hello.c by Nick for Hytech AVR */\r
+\r
+#include <stdio.h>\r
+#include <avr/io.h>\r
+/* #include <avr/signal.h> */\r
+#include "hello.h"\r
+\r
+int my_puts(char *s)\r
+ {\r
+ char c;\r
+\r
+ while (c = *s++)\r
+ {\r
+ my_putc(c);\r
+ }\r
+ return 0;\r
+ }\r
+\r
+int my_putc(char c)\r
+ {\r
+ while (bit_is_set(UCSRA, UDRE) == 0)\r
+ ;\r
+ UDR = c;\r
+ return 0;\r
+ }\r
+\r
+int my_getc(void)\r
+ {\r
+ if (bit_is_set(UCSRA, RXC) == 0)\r
+ return -1;\r
+ return UDR;\r
+ }\r
+\r
+int main(void)\r
+ {\r
+ __do_copy_data();\r
+ __do_clear_bss();\r
+\r
+ /* initialise the AVR's built-in UART for 9600 bps */\r
+ UCSRA = _BV(TXC);\r
+ UCSRB = _BV(TXEN) | _BV(RXEN);\r
+ UBRR = 71;\r
+ /* UBRRH = 0; */ /* = (11059200 / (9600 * 16)) - 1 */\r
+\r
+#if 1\r
+ /* send a demo message to ISPD via the AVR's UART */\r
+ my_puts("a"); /* "hello, world\r\n"); */\r
+#else\r
+ /* setup the standard input, output and error streams */\r
+ fdevopen(my_putc, my_getc, 0);\r
+\r
+ /* send a demo message to ISPD via the AVR's UART */\r
+ printf("hello, world\r\n");\r
+#endif\r
+\r
+ /* enter an infinite loop as we can never exit */\r
+ while (1)\r
+ ;\r
+ }\r
+\r
--- /dev/null
+/* hello.h by Nick for Hytech AVR */\r
+\r
+int my_puts(char *s);\r
+int my_putc(char c);\r
+int my_getc(void);\r
+int main(void);\r
+\r
--- /dev/null
+:100000000DC027C026C025C024C023C022C021C0E7\r
+:1000100020C01FC01EC01DC01CC01BC011241FBE9D\r
+:10002000CFEDD0E0DEBFCDBF10E0A0E6B0E0E2EB68\r
+:10003000F0E003C0C89531960D92A236B107D1F712\r
+:1000400010E0A2E6B0E001C01D92A236B107E1F7D0\r
+:1000500020C0D6CFCF93DF93D92FC82F8991882383\r
+:1000600021F008D089918823E1F780E090E0DF91CA\r
+:10007000CF9108955D9BFECF8CB980E090E008950C\r
+:100080005F9B03C08CB1992708958FEF9FEF089570\r
+:100090000895CFEDD0E0DEBFCDBFC6DFD1DF80E475\r
+:1000A0008BB988E18AB987E489B980E690E0D2DF2C\r
+:0200B000FFCF80\r
+:0200B2006100EB\r
+:00000001FF\r
--- /dev/null
+GAS LISTING C:\cygwin\tmp/cc8saaaa.s page 1\r
+\r
+\r
+ 1 .file "hello.c"\r
+ 2 .arch at90s4433\r
+ 3 __SREG__ = 0x3f\r
+ 4 __SP_H__ = 0x3e\r
+ 5 __SP_L__ = 0x3d\r
+ 6 __tmp_reg__ = 0\r
+ 7 __zero_reg__ = 1\r
+ 8 .global __do_copy_data\r
+ 9 .global __do_clear_bss\r
+ 10 .stabs "c:\\uzi\\src\\avrsample/",100,0,0,.Ltext0\r
+ 11 .stabs "hello.c",100,0,0,.Ltext0\r
+ 12 .text\r
+ 13 .Ltext0:\r
+ 14 .stabs "gcc2_compiled.",60,0,0,0\r
+ 15 .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0\r
+ 16 .stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0\r
+ 17 .stabs "long int:t(0,3)=@s32;r(0,3);0020000000000;0017777777777;",128,0,0,0\r
+ 18 .stabs "unsigned int:t(0,4)=r(0,4);0000000000000;0000000177777;",128,0,0,0\r
+ 19 .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0000000000000;0037777777777;",128,0,0,0\r
+ 20 .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,\r
+ 21 .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;",128,0,0,\r
+ 22 .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0\r
+ 23 .stabs "short unsigned int:t(0,9)=r(0,9);0000000000000;0000000177777;",128,0,0,0\r
+ 24 .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0\r
+ 25 .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0\r
+ 26 .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0\r
+ 27 .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0\r
+ 28 .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0\r
+ 29 .stabs "complex int:t(0,15)=s4real:(0,1),0,16;imag:(0,1),16,16;;",128,0,0,0\r
+ 30 .stabs "complex float:t(0,16)=r(0,16);8;0;",128,0,0,0\r
+ 31 .stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0\r
+ 32 .stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0\r
+ 33 .stabs "__builtin_va_list:t(0,19)=*(0,20)=(0,20)",128,0,0,0\r
+ 34 .stabs "_Bool:t(0,21)=@s8;-16;",128,0,0,0\r
+ 35 .stabs "hello.c",130,0,0,0\r
+ 36 .stabs "c:/WinAVR/avr/include/stdio.h",130,0,0,0\r
+ 37 .stabs "c:/WinAVR/avr/include/inttypes.h",130,0,0,0\r
+ 38 .stabs "int8_t:t(3,1)=(0,10)",128,0,46,0\r
+ 39 .stabs "uint8_t:t(3,2)=(0,11)",128,0,47,0\r
+ 40 .stabs "int16_t:t(3,3)=(0,1)",128,0,49,0\r
+ 41 .stabs "uint16_t:t(3,4)=(0,4)",128,0,50,0\r
+ 42 .stabs "int32_t:t(3,5)=(0,3)",128,0,52,0\r
+ 43 .stabs "uint32_t:t(3,6)=(0,5)",128,0,53,0\r
+ 44 .stabs "int64_t:t(3,7)=(0,6)",128,0,55,0\r
+ 45 .stabs "uint64_t:t(3,8)=(0,7)",128,0,56,0\r
+ 46 .stabs "intptr_t:t(3,9)=(3,3)",128,0,58,0\r
+ 47 .stabs "uintptr_t:t(3,10)=(3,4)",128,0,59,0\r
+ 48 .stabn 162,0,0,0\r
+ 49 .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stdarg.h",130,0,0,0\r
+ 50 .stabs "__gnuc_va_list:t(4,1)=(0,19)",128,0,43,0\r
+ 51 .stabs "va_list:t(4,2)=(4,1)",128,0,105,0\r
+ 52 .stabn 162,0,0,0\r
+ 53 .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stddef.h",130,0,0,0\r
+ 54 .stabs "size_t:t(5,1)=(0,4)",128,0,213,0\r
+ 55 .stabn 162,0,0,0\r
+ 56 .stabn 162,0,0,0\r
+ 57 .stabs "c:/WinAVR/avr/include/avr/io.h",130,0,0,0\r
+\fGAS LISTING C:\cygwin\tmp/cc8saaaa.s page 2\r
+\r
+\r
+ 58 .stabs "c:/WinAVR/avr/include/avr/io4433.h",130,0,0,0\r
+ 59 .stabs "c:/WinAVR/avr/include/avr/sfr_defs.h",130,0,0,0\r
+ 60 .stabn 162,0,0,0\r
+ 61 .stabn 162,0,0,0\r
+ 62 .stabn 162,0,0,0\r
+ 63 .stabs "hello.h",130,0,0,0\r
+ 64 .stabn 162,0,0,0\r
+ 65 .stabs "my_puts:F(0,1)",36,0,9,my_puts\r
+ 66 .stabs "s:P(1,1)=*(0,2)",64,0,8,28\r
+ 67 .global my_puts\r
+ 68 .type my_puts, @function\r
+ 69 my_puts:\r
+ 1:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 2:hello.c **** \r
+ 3:hello.c **** #include <stdio.h>\r
+ 4:hello.c **** #include <avr/io.h>\r
+ 5:hello.c **** /* #include <avr/signal.h> */\r
+ 6:hello.c **** #include "hello.h"\r
+ 7:hello.c **** \r
+ 8:hello.c **** int my_puts(char *s)\r
+ 9:hello.c **** {\r
+ 70 .stabn 68,0,9,.LM1-my_puts\r
+ 71 .LM1:\r
+ 72 /* prologue: frame size=0 */\r
+ 73 0000 CF93 push r28\r
+ 74 0002 DF93 push r29\r
+ 75 /* prologue end (size=2) */\r
+ 76 0004 D92F mov r29,r25\r
+ 77 0006 C82F mov r28,r24\r
+ 10:hello.c **** char c;\r
+ 11:hello.c **** \r
+ 12:hello.c **** while (c = *s++)\r
+ 78 .stabn 68,0,12,.LM2-my_puts\r
+ 79 .LM2:\r
+ 80 .LBB2:\r
+ 81 0008 8991 ld r24,Y+\r
+ 82 000a 8823 tst r24\r
+ 83 000c 21F0 breq .L7\r
+ 84 .L5:\r
+ 13:hello.c **** {\r
+ 14:hello.c **** my_putc(c);\r
+ 85 .stabn 68,0,14,.LM3-my_puts\r
+ 86 .LM3:\r
+ 87 000e 08D0 rcall my_putc\r
+ 88 0010 8991 ld r24,Y+\r
+ 89 0012 8823 tst r24\r
+ 90 0014 E1F7 brne .L5\r
+ 91 .L7:\r
+ 15:hello.c **** }\r
+ 16:hello.c **** return 0;\r
+ 17:hello.c **** }\r
+ 92 .stabn 68,0,17,.LM4-my_puts\r
+ 93 .LM4:\r
+ 94 .LBE2:\r
+ 95 0016 80E0 ldi r24,lo8(0)\r
+ 96 0018 90E0 ldi r25,hi8(0)\r
+ 97 /* epilogue: frame size=0 */\r
+\fGAS LISTING C:\cygwin\tmp/cc8saaaa.s page 3\r
+\r
+\r
+ 98 001a DF91 pop r29\r
+ 99 001c CF91 pop r28\r
+ 100 001e 0895 ret\r
+ 101 /* epilogue end (size=3) */\r
+ 102 /* function my_puts size 16 (11) */\r
+ 103 .size my_puts, .-my_puts\r
+ 104 .stabs "c:r(0,2)",64,0,10,24\r
+ 105 .stabn 192,0,0,.LBB2-my_puts\r
+ 106 .stabn 224,0,0,.LBE2-my_puts\r
+ 107 .Lscope0:\r
+ 108 .stabs "",36,0,0,.Lscope0-my_puts\r
+ 109 .stabs "my_putc:F(0,1)",36,0,20,my_putc\r
+ 110 .stabs "c:P(0,2)",64,0,19,24\r
+ 111 .global my_putc\r
+ 112 .type my_putc, @function\r
+ 113 my_putc:\r
+ 18:hello.c **** \r
+ 19:hello.c **** int my_putc(char c)\r
+ 20:hello.c **** {\r
+ 114 .stabn 68,0,20,.LM5-my_putc\r
+ 115 .LM5:\r
+ 116 /* prologue: frame size=0 */\r
+ 117 /* prologue end (size=0) */\r
+ 21:hello.c **** while (bit_is_set(UCSRA, UDRE) == 0)\r
+ 118 .stabn 68,0,21,.LM6-my_putc\r
+ 119 .LM6:\r
+ 120 .L9:\r
+ 121 0020 5D9B sbis 43-0x20,5\r
+ 122 0022 FECF rjmp .L9\r
+ 22:hello.c **** ;\r
+ 23:hello.c **** UDR = c;\r
+ 123 .stabn 68,0,23,.LM7-my_putc\r
+ 124 .LM7:\r
+ 125 0024 8CB9 out 44-0x20,r24\r
+ 24:hello.c **** return 0;\r
+ 25:hello.c **** }\r
+ 126 .stabn 68,0,25,.LM8-my_putc\r
+ 127 .LM8:\r
+ 128 0026 80E0 ldi r24,lo8(0)\r
+ 129 0028 90E0 ldi r25,hi8(0)\r
+ 130 /* epilogue: frame size=0 */\r
+ 131 002a 0895 ret\r
+ 132 /* epilogue end (size=1) */\r
+ 133 /* function my_putc size 6 (5) */\r
+ 134 .size my_putc, .-my_putc\r
+ 135 .Lscope1:\r
+ 136 .stabs "",36,0,0,.Lscope1-my_putc\r
+ 137 .stabs "my_getc:F(0,1)",36,0,28,my_getc\r
+ 138 .global my_getc\r
+ 139 .type my_getc, @function\r
+ 140 my_getc:\r
+ 26:hello.c **** \r
+ 27:hello.c **** int my_getc(void)\r
+ 28:hello.c **** {\r
+ 141 .stabn 68,0,28,.LM9-my_getc\r
+ 142 .LM9:\r
+ 143 /* prologue: frame size=0 */\r
+\fGAS LISTING C:\cygwin\tmp/cc8saaaa.s page 4\r
+\r
+\r
+ 144 /* prologue end (size=0) */\r
+ 29:hello.c **** if (bit_is_set(UCSRA, RXC) == 0)\r
+ 145 .stabn 68,0,29,.LM10-my_getc\r
+ 146 .LM10:\r
+ 147 002c 5F9B sbis 43-0x20,7\r
+ 148 002e 03C0 rjmp .L14\r
+ 30:hello.c **** return -1;\r
+ 31:hello.c **** return UDR;\r
+ 149 .stabn 68,0,31,.LM11-my_getc\r
+ 150 .LM11:\r
+ 151 0030 8CB1 in r24,44-0x20\r
+ 152 0032 9927 clr r25\r
+ 32:hello.c **** }\r
+ 153 .stabn 68,0,32,.LM12-my_getc\r
+ 154 .LM12:\r
+ 155 0034 0895 ret\r
+ 156 .stabn 68,0,30,.LM13-my_getc\r
+ 157 .LM13:\r
+ 158 .L14:\r
+ 159 0036 8FEF ldi r24,lo8(-1)\r
+ 160 0038 9FEF ldi r25,hi8(-1)\r
+ 161 .stabn 68,0,32,.LM14-my_getc\r
+ 162 .LM14:\r
+ 163 003a 0895 ret\r
+ 164 /* epilogue: frame size=0 */\r
+ 165 003c 0895 ret\r
+ 166 /* epilogue end (size=1) */\r
+ 167 /* function my_getc size 9 (8) */\r
+ 168 .size my_getc, .-my_getc\r
+ 169 .Lscope2:\r
+ 170 .stabs "",36,0,0,.Lscope2-my_getc\r
+ 171 .data\r
+ 172 .LC0:\r
+ 173 0000 6100 .string "a"\r
+ 174 .text\r
+ 175 .stabs "main:F(0,1)",36,0,35,main\r
+ 176 .global main\r
+ 177 .type main, @function\r
+ 178 main:\r
+ 33:hello.c **** \r
+ 34:hello.c **** int main(void)\r
+ 35:hello.c **** {\r
+ 179 .stabn 68,0,35,.LM15-main\r
+ 180 .LM15:\r
+ 181 /* prologue: frame size=0 */\r
+ 182 003e C0E0 ldi r28,lo8(__stack - 0)\r
+ 183 0040 D0E0 ldi r29,hi8(__stack - 0)\r
+ 184 0042 DEBF out __SP_H__,r29\r
+ 185 0044 CDBF out __SP_L__,r28\r
+ 186 /* prologue end (size=4) */\r
+ 36:hello.c **** __do_copy_data();\r
+ 187 .stabn 68,0,36,.LM16-main\r
+ 188 .LM16:\r
+ 189 .LBB3:\r
+ 190 0046 00D0 rcall __do_copy_data\r
+ 37:hello.c **** __do_clear_bss();\r
+ 191 .stabn 68,0,37,.LM17-main\r
+\fGAS LISTING C:\cygwin\tmp/cc8saaaa.s page 5\r
+\r
+\r
+ 192 .LM17:\r
+ 193 0048 00D0 rcall __do_clear_bss\r
+ 38:hello.c **** \r
+ 39:hello.c **** /* initialise the AVR's built-in UART for 9600 bps */\r
+ 40:hello.c **** UCSRA = _BV(TXC);\r
+ 194 .stabn 68,0,40,.LM18-main\r
+ 195 .LM18:\r
+ 196 004a 80E4 ldi r24,lo8(64)\r
+ 197 004c 8BB9 out 43-0x20,r24\r
+ 41:hello.c **** UCSRB = _BV(TXEN) | _BV(RXEN);\r
+ 198 .stabn 68,0,41,.LM19-main\r
+ 199 .LM19:\r
+ 200 004e 88E1 ldi r24,lo8(24)\r
+ 201 0050 8AB9 out 42-0x20,r24\r
+ 42:hello.c **** UBRR = 71;\r
+ 202 .stabn 68,0,42,.LM20-main\r
+ 203 .LM20:\r
+ 204 0052 87E4 ldi r24,lo8(71)\r
+ 205 0054 89B9 out 41-0x20,r24\r
+ 43:hello.c **** /* UBRRH = 0; */ /* = (11059200 / (9600 * 16)) - 1 */\r
+ 44:hello.c **** \r
+ 45:hello.c **** #if 1\r
+ 46:hello.c **** /* send a demo message to ISPD via the AVR's UART */\r
+ 47:hello.c **** my_puts("a"); /* "hello, world\r\n"); */\r
+ 206 .stabn 68,0,47,.LM21-main\r
+ 207 .LM21:\r
+ 208 0056 80E0 ldi r24,lo8(.LC0)\r
+ 209 0058 90E0 ldi r25,hi8(.LC0)\r
+ 210 005a D2DF rcall my_puts\r
+ 48:hello.c **** #else\r
+ 49:hello.c **** /* setup the standard input, output and error streams */\r
+ 50:hello.c **** fdevopen(my_putc, my_getc, 0);\r
+ 51:hello.c **** \r
+ 52:hello.c **** /* send a demo message to ISPD via the AVR's UART */\r
+ 53:hello.c **** printf("hello, world\r\n");\r
+ 54:hello.c **** #endif\r
+ 55:hello.c **** \r
+ 56:hello.c **** /* enter an infinite loop as we can never exit */\r
+ 57:hello.c **** while (1)\r
+ 211 .stabn 68,0,57,.LM22-main\r
+ 212 .LM22:\r
+ 213 .L16:\r
+ 214 005c FFCF rjmp .L16\r
+ 58:hello.c **** ;\r
+ 59:hello.c **** }\r
+ 215 .stabn 68,0,59,.LM23-main\r
+ 216 .LM23:\r
+ 217 .LBE3:\r
+ 218 /* epilogue: frame size=0 */\r
+ 219 /* epilogue: noreturn */\r
+ 220 /* epilogue end (size=0) */\r
+ 221 /* function main size 16 (12) */\r
+ 222 .size main, .-main\r
+ 223 .Lscope3:\r
+ 224 .stabs "",36,0,0,.Lscope3-main\r
+ 225 .text\r
+ 226 .stabs "",100,0,0,Letext\r
+\fGAS LISTING C:\cygwin\tmp/cc8saaaa.s page 6\r
+\r
+\r
+ 227 Letext:\r
+ 228 /* File "hello.c": code 47 = 0x002f ( 36), prologues 6, epilogues 5 */\r
+\fGAS LISTING C:\cygwin\tmp/cc8saaaa.s page 7\r
+\r
+\r
+DEFINED SYMBOLS\r
+ *ABS*:00000000 hello.c\r
+ *ABS*:0000003f __SREG__\r
+ *ABS*:0000003e __SP_H__\r
+ *ABS*:0000003d __SP_L__\r
+ *ABS*:00000000 __tmp_reg__\r
+ *ABS*:00000001 __zero_reg__\r
+C:\cygwin\tmp/cc8saaaa.s:69 .text:00000000 my_puts\r
+C:\cygwin\tmp/cc8saaaa.s:113 .text:00000020 my_putc\r
+C:\cygwin\tmp/cc8saaaa.s:140 .text:0000002c my_getc\r
+C:\cygwin\tmp/cc8saaaa.s:178 .text:0000003e main\r
+C:\cygwin\tmp/cc8saaaa.s:227 .text:0000005e Letext\r
+\r
+UNDEFINED SYMBOLS\r
+__do_copy_data\r
+__do_clear_bss\r
+__stack\r
--- /dev/null
+Archive member included because of file (symbol)\r
+\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ hello.o (__do_copy_data)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ hello.o (__do_clear_bss)\r
+\r
+Memory Configuration\r
+\r
+Name Origin Length Attributes\r
+text 0x00000000 0x00002000 xr\r
+data 0x00800060 0x0000ffa0 rw !x\r
+eeprom 0x00810000 0x00010000 rw !x\r
+*default* 0x00000000 0xffffffff\r
+\r
+Linker script and memory map\r
+\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+LOAD hello.o\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a\r
+\r
+.hash\r
+ *(.hash)\r
+\r
+.dynsym\r
+ *(.dynsym)\r
+\r
+.dynstr\r
+ *(.dynstr)\r
+\r
+.gnu.version\r
+ *(.gnu.version)\r
+\r
+.gnu.version_d\r
+ *(.gnu.version_d)\r
+\r
+.gnu.version_r\r
+ *(.gnu.version_r)\r
+\r
+.rel.init\r
+ *(.rel.init)\r
+\r
+.rela.init\r
+ *(.rela.init)\r
+\r
+.rel.text\r
+ *(.rel.text)\r
+ *(.rel.text.*)\r
+ *(.rel.gnu.linkonce.t*)\r
+\r
+.rela.text\r
+ *(.rela.text)\r
+ *(.rela.text.*)\r
+ *(.rela.gnu.linkonce.t*)\r
+\r
+.rel.fini\r
+ *(.rel.fini)\r
+\r
+.rela.fini\r
+ *(.rela.fini)\r
+\r
+.rel.rodata\r
+ *(.rel.rodata)\r
+ *(.rel.rodata.*)\r
+ *(.rel.gnu.linkonce.r*)\r
+\r
+.rela.rodata\r
+ *(.rela.rodata)\r
+ *(.rela.rodata.*)\r
+ *(.rela.gnu.linkonce.r*)\r
+\r
+.rel.data\r
+ *(.rel.data)\r
+ *(.rel.data.*)\r
+ *(.rel.gnu.linkonce.d*)\r
+\r
+.rela.data\r
+ *(.rela.data)\r
+ *(.rela.data.*)\r
+ *(.rela.gnu.linkonce.d*)\r
+\r
+.rel.ctors\r
+ *(.rel.ctors)\r
+\r
+.rela.ctors\r
+ *(.rela.ctors)\r
+\r
+.rel.dtors\r
+ *(.rel.dtors)\r
+\r
+.rela.dtors\r
+ *(.rela.dtors)\r
+\r
+.rel.got\r
+ *(.rel.got)\r
+\r
+.rela.got\r
+ *(.rela.got)\r
+\r
+.rel.bss\r
+ *(.rel.bss)\r
+\r
+.rela.bss\r
+ *(.rela.bss)\r
+\r
+.rel.plt\r
+ *(.rel.plt)\r
+\r
+.rela.plt\r
+ *(.rela.plt)\r
+\r
+.text 0x00000000 0xb2\r
+ *(.vectors)\r
+ .vectors 0x00000000 0x1c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x00000000 __vectors\r
+ 0x00000000 __vector_default\r
+ 0x0000001c __ctors_start = .\r
+ *(.ctors)\r
+ 0x0000001c __ctors_end = .\r
+ 0x0000001c __dtors_start = .\r
+ *(.dtors)\r
+ 0x0000001c __dtors_end = .\r
+ *(.progmem.gcc*)\r
+ *(.progmem*)\r
+ 0x0000001c . = ALIGN (0x2)\r
+ *(.init0)\r
+ *(.init1)\r
+ *(.init2)\r
+ .init2 0x0000001c 0xc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ *(.init3)\r
+ *(.init4)\r
+ .init4 0x00000028 0x18 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ 0x00000028 __do_copy_data\r
+ .init4 0x00000040 0x10 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ 0x00000040 __do_clear_bss\r
+ *(.init5)\r
+ *(.init6)\r
+ *(.init7)\r
+ *(.init8)\r
+ *(.init9)\r
+ .init9 0x00000050 0x2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ *(.text)\r
+ .text 0x00000052 0x2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x00000052 __vector_1\r
+ 0x00000052 __vector_12\r
+ 0x00000052 __bad_interrupt\r
+ 0x00000052 __vector_6\r
+ 0x00000052 __vector_3\r
+ 0x00000052 __vector_11\r
+ 0x00000052 __vector_13\r
+ 0x00000052 __vector_7\r
+ 0x00000052 __vector_5\r
+ 0x00000052 __vector_4\r
+ 0x00000052 __vector_9\r
+ 0x00000052 __vector_2\r
+ 0x00000052 __vector_8\r
+ 0x00000052 __vector_10\r
+ .text 0x00000054 0x5e hello.o\r
+ 0x00000092 main\r
+ 0x00000080 my_getc\r
+ 0x00000054 my_puts\r
+ 0x00000074 my_putc\r
+ 0x000000b2 . = ALIGN (0x2)\r
+ *(.text.*)\r
+ 0x000000b2 . = ALIGN (0x2)\r
+ *(.fini9)\r
+ *(.fini8)\r
+ *(.fini7)\r
+ *(.fini6)\r
+ *(.fini5)\r
+ *(.fini4)\r
+ *(.fini3)\r
+ *(.fini2)\r
+ *(.fini1)\r
+ *(.fini0)\r
+ 0x000000b2 _etext = .\r
+\r
+.data 0x00800060 0x2 load address 0x000000b2\r
+ 0x00800060 PROVIDE (__data_start, .)\r
+ *(.data)\r
+ .data 0x00800060 0x2 hello.o\r
+ *(.gnu.linkonce.d*)\r
+ 0x00800062 . = ALIGN (0x2)\r
+ 0x00800062 _edata = .\r
+ 0x00800062 PROVIDE (__data_end, .)\r
+\r
+.bss 0x00800062 0x0\r
+ 0x00800062 PROVIDE (__bss_start, .)\r
+ *(.bss)\r
+ *(COMMON)\r
+ 0x00800062 PROVIDE (__bss_end, .)\r
+ 0x000000b2 __data_load_start = LOADADDR (.data)\r
+ 0x000000b4 __data_load_end = (__data_load_start + SIZEOF (.data))\r
+\r
+.noinit 0x00800062 0x0\r
+ 0x00800062 PROVIDE (__noinit_start, .)\r
+ *(.noinit*)\r
+ 0x00800062 PROVIDE (__noinit_end, .)\r
+ 0x00800062 _end = .\r
+ 0x00800062 PROVIDE (__heap_start, .)\r
+\r
+.eeprom 0x00810000 0x0 load address 0x000000b4\r
+ *(.eeprom*)\r
+ 0x00810000 __eeprom_end = .\r
+\r
+.stab 0x00000000 0x6d8\r
+ *(.stab)\r
+ .stab 0x00000000 0x2a0 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ .stab 0x000002a0 0x438 hello.o\r
+ 0x444 (size before relaxing)\r
+\r
+.stabstr 0x00000000 0x6a4\r
+ *(.stabstr)\r
+ .stabstr 0x00000000 0x6a4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x0 (size before relaxing)\r
+\r
+.stab.excl\r
+ *(.stab.excl)\r
+\r
+.stab.exclstr\r
+ *(.stab.exclstr)\r
+\r
+.stab.index\r
+ *(.stab.index)\r
+\r
+.stab.indexstr\r
+ *(.stab.indexstr)\r
+\r
+.comment\r
+ *(.comment)\r
+\r
+.debug\r
+ *(.debug)\r
+\r
+.line\r
+ *(.line)\r
+\r
+.debug_srcinfo\r
+ *(.debug_srcinfo)\r
+\r
+.debug_sfnames\r
+ *(.debug_sfnames)\r
+\r
+.debug_aranges\r
+ *(.debug_aranges)\r
+\r
+.debug_pubnames\r
+ *(.debug_pubnames)\r
+\r
+.debug_info\r
+ *(.debug_info)\r
+ *(.gnu.linkonce.wi.*)\r
+\r
+.debug_abbrev\r
+ *(.debug_abbrev)\r
+\r
+.debug_line\r
+ *(.debug_line)\r
+\r
+.debug_frame\r
+ *(.debug_frame)\r
+\r
+.debug_str\r
+ *(.debug_str)\r
+\r
+.debug_loc\r
+ *(.debug_loc)\r
+\r
+.debug_macinfo\r
+ *(.debug_macinfo)\r
+OUTPUT(hello.elf elf32-avr)\r
+\r
+Cross Reference Table\r
+\r
+Symbol File\r
+__bad_interrupt c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__bss_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+__bss_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+__data_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__data_load_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__data_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__do_clear_bss c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ hello.o\r
+__do_copy_data c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ hello.o\r
+__heap_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__init c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__stack c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ hello.o\r
+__vector_1 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_10 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_11 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_12 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_13 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_3 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_5 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_7 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_8 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_9 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_default c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vectors c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+main hello.o\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+my_getc hello.o\r
+my_putc hello.o\r
+my_puts hello.o\r
--- /dev/null
+ .file "hello.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+ .stabs "c:\\uzi\\src\\avrsample/",100,0,0,.Ltext0\r
+ .stabs "hello.c",100,0,0,.Ltext0\r
+ .text\r
+.Ltext0:\r
+ .stabs "gcc2_compiled.",60,0,0,0\r
+ .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0\r
+ .stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0\r
+ .stabs "long int:t(0,3)=@s32;r(0,3);0020000000000;0017777777777;",128,0,0,0\r
+ .stabs "unsigned int:t(0,4)=r(0,4);0000000000000;0000000177777;",128,0,0,0\r
+ .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0000000000000;0037777777777;",128,0,0,0\r
+ .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,0\r
+ .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;",128,0,0,0\r
+ .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0\r
+ .stabs "short unsigned int:t(0,9)=r(0,9);0000000000000;0000000177777;",128,0,0,0\r
+ .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0\r
+ .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0\r
+ .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "complex int:t(0,15)=s4real:(0,1),0,16;imag:(0,1),16,16;;",128,0,0,0\r
+ .stabs "complex float:t(0,16)=r(0,16);8;0;",128,0,0,0\r
+ .stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0\r
+ .stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0\r
+ .stabs "__builtin_va_list:t(0,19)=*(0,20)=(0,20)",128,0,0,0\r
+ .stabs "_Bool:t(0,21)=@s8;-16;",128,0,0,0\r
+ .stabs "hello.c",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/stdio.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/inttypes.h",130,0,0,0\r
+ .stabs "int8_t:t(3,1)=(0,10)",128,0,46,0\r
+ .stabs "uint8_t:t(3,2)=(0,11)",128,0,47,0\r
+ .stabs "int16_t:t(3,3)=(0,1)",128,0,49,0\r
+ .stabs "uint16_t:t(3,4)=(0,4)",128,0,50,0\r
+ .stabs "int32_t:t(3,5)=(0,3)",128,0,52,0\r
+ .stabs "uint32_t:t(3,6)=(0,5)",128,0,53,0\r
+ .stabs "int64_t:t(3,7)=(0,6)",128,0,55,0\r
+ .stabs "uint64_t:t(3,8)=(0,7)",128,0,56,0\r
+ .stabs "intptr_t:t(3,9)=(3,3)",128,0,58,0\r
+ .stabs "uintptr_t:t(3,10)=(3,4)",128,0,59,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stdarg.h",130,0,0,0\r
+ .stabs "__gnuc_va_list:t(4,1)=(0,19)",128,0,43,0\r
+ .stabs "va_list:t(4,2)=(4,1)",128,0,105,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stddef.h",130,0,0,0\r
+ .stabs "size_t:t(5,1)=(0,4)",128,0,213,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/io.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/io4433.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/sfr_defs.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "hello.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "my_puts:F(0,1)",36,0,9,my_puts\r
+ .stabs "s:P(1,1)=*(0,2)",64,0,8,28\r
+.global my_puts\r
+ .type my_puts, @function\r
+my_puts:\r
+ .stabn 68,0,9,.LM1-my_puts\r
+.LM1:\r
+/* prologue: frame size=0 */\r
+ push r28\r
+ push r29\r
+/* prologue end (size=2) */\r
+ mov r29,r25\r
+ mov r28,r24\r
+ .stabn 68,0,12,.LM2-my_puts\r
+.LM2:\r
+.LBB2:\r
+ ld r24,Y+\r
+ tst r24\r
+ breq .L7\r
+.L5:\r
+ .stabn 68,0,14,.LM3-my_puts\r
+.LM3:\r
+ rcall my_putc\r
+ ld r24,Y+\r
+ tst r24\r
+ brne .L5\r
+.L7:\r
+ .stabn 68,0,17,.LM4-my_puts\r
+.LM4:\r
+.LBE2:\r
+ ldi r24,lo8(0)\r
+ ldi r25,hi8(0)\r
+/* epilogue: frame size=0 */\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=3) */\r
+/* function my_puts size 16 (11) */\r
+ .size my_puts, .-my_puts\r
+ .stabs "c:r(0,2)",64,0,10,24\r
+ .stabn 192,0,0,.LBB2-my_puts\r
+ .stabn 224,0,0,.LBE2-my_puts\r
+.Lscope0:\r
+ .stabs "",36,0,0,.Lscope0-my_puts\r
+ .stabs "my_putc:F(0,1)",36,0,20,my_putc\r
+ .stabs "c:P(0,2)",64,0,19,24\r
+.global my_putc\r
+ .type my_putc, @function\r
+my_putc:\r
+ .stabn 68,0,20,.LM5-my_putc\r
+.LM5:\r
+/* prologue: frame size=0 */\r
+/* prologue end (size=0) */\r
+ .stabn 68,0,21,.LM6-my_putc\r
+.LM6:\r
+.L9:\r
+ sbis 43-0x20,5\r
+ rjmp .L9\r
+ .stabn 68,0,23,.LM7-my_putc\r
+.LM7:\r
+ out 44-0x20,r24\r
+ .stabn 68,0,25,.LM8-my_putc\r
+.LM8:\r
+ ldi r24,lo8(0)\r
+ ldi r25,hi8(0)\r
+/* epilogue: frame size=0 */\r
+ ret\r
+/* epilogue end (size=1) */\r
+/* function my_putc size 6 (5) */\r
+ .size my_putc, .-my_putc\r
+.Lscope1:\r
+ .stabs "",36,0,0,.Lscope1-my_putc\r
+ .stabs "my_getc:F(0,1)",36,0,28,my_getc\r
+.global my_getc\r
+ .type my_getc, @function\r
+my_getc:\r
+ .stabn 68,0,28,.LM9-my_getc\r
+.LM9:\r
+/* prologue: frame size=0 */\r
+/* prologue end (size=0) */\r
+ .stabn 68,0,29,.LM10-my_getc\r
+.LM10:\r
+ sbis 43-0x20,7\r
+ rjmp .L14\r
+ .stabn 68,0,31,.LM11-my_getc\r
+.LM11:\r
+ in r24,44-0x20\r
+ clr r25\r
+ .stabn 68,0,32,.LM12-my_getc\r
+.LM12:\r
+ ret\r
+ .stabn 68,0,30,.LM13-my_getc\r
+.LM13:\r
+.L14:\r
+ ldi r24,lo8(-1)\r
+ ldi r25,hi8(-1)\r
+ .stabn 68,0,32,.LM14-my_getc\r
+.LM14:\r
+ ret\r
+/* epilogue: frame size=0 */\r
+ ret\r
+/* epilogue end (size=1) */\r
+/* function my_getc size 9 (8) */\r
+ .size my_getc, .-my_getc\r
+.Lscope2:\r
+ .stabs "",36,0,0,.Lscope2-my_getc\r
+ .data\r
+.LC0:\r
+ .string "a"\r
+ .text\r
+ .stabs "main:F(0,1)",36,0,35,main\r
+.global main\r
+ .type main, @function\r
+main:\r
+ .stabn 68,0,35,.LM15-main\r
+.LM15:\r
+/* prologue: frame size=0 */\r
+ ldi r28,lo8(__stack - 0)\r
+ ldi r29,hi8(__stack - 0)\r
+ out __SP_H__,r29\r
+ out __SP_L__,r28\r
+/* prologue end (size=4) */\r
+ .stabn 68,0,36,.LM16-main\r
+.LM16:\r
+.LBB3:\r
+ rcall __do_copy_data\r
+ .stabn 68,0,37,.LM17-main\r
+.LM17:\r
+ rcall __do_clear_bss\r
+ .stabn 68,0,40,.LM18-main\r
+.LM18:\r
+ ldi r24,lo8(64)\r
+ out 43-0x20,r24\r
+ .stabn 68,0,41,.LM19-main\r
+.LM19:\r
+ ldi r24,lo8(24)\r
+ out 42-0x20,r24\r
+ .stabn 68,0,42,.LM20-main\r
+.LM20:\r
+ ldi r24,lo8(71)\r
+ out 41-0x20,r24\r
+ .stabn 68,0,47,.LM21-main\r
+.LM21:\r
+ ldi r24,lo8(.LC0)\r
+ ldi r25,hi8(.LC0)\r
+ rcall my_puts\r
+ .stabn 68,0,57,.LM22-main\r
+.LM22:\r
+.L16:\r
+ rjmp .L16\r
+ .stabn 68,0,59,.LM23-main\r
+.LM23:\r
+.LBE3:\r
+/* epilogue: frame size=0 */\r
+/* epilogue: noreturn */\r
+/* epilogue end (size=0) */\r
+/* function main size 16 (12) */\r
+ .size main, .-main\r
+.Lscope3:\r
+ .stabs "",36,0,0,.Lscope3-main\r
+ .text\r
+ .stabs "",100,0,0,Letext\r
+Letext:\r
+/* File "hello.c": code 47 = 0x002f ( 36), prologues 6, epilogues 5 */\r
--- /dev/null
+/*
+ * Copyright (c) 2002 Joerg Wunsch
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id: calloc.c,v 1.1 2002/10/12 19:37:29 joerg_wunsch Exp $
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+void *
+calloc(size_t nele, size_t size)
+{
+ void *p;
+
+ if ((p = malloc(nele * size)) == 0)
+ return 0;
+ memset(p, 0, nele * size);
+ return p;
+}
--- /dev/null
+ .file "calloc.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+ .text\r
+.global calloc\r
+ .type calloc, @function\r
+calloc:\r
+/* prologue: frame size=8 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,8\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ std Y+3,r22\r
+ std Y+4,r23\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ ldd r18,Y+3\r
+ ldd r19,Y+4\r
+ mov r23,r19\r
+ mov r22,r18\r
+ rcall __mulhi3\r
+ rcall malloc\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ brne .L7\r
+ std Y+7,__zero_reg__\r
+ std Y+8,__zero_reg__\r
+ rjmp .L6\r
+.L7:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ ldd r18,Y+3\r
+ ldd r19,Y+4\r
+ mov r23,r19\r
+ mov r22,r18\r
+ rcall __mulhi3\r
+ mov r20,r24\r
+ mov r21,r25\r
+ ldi r22,lo8(0)\r
+ ldi r23,hi8(0)\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ rcall memset\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+.L6:\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+/* epilogue: frame size=8 */\r
+ adiw r28,8\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function calloc size 60 (41) */\r
+ .size calloc, .-calloc\r
+/* File "calloc.c": code 60 = 0x003c ( 41), prologues 10, epilogues 9 */\r
--- /dev/null
+/* Copyright (c) 2002, Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* $Id: fdevopen.c,v 1.3 2003/03/17 17:49:46 troth Exp $ */
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "stdio_private.h"
+
+FILE *__iob[3]; /* stdin, stdout, stderr */
+
+/** \ingroup avr_stdio
+ This function is a replacement for \c fopen().
+
+ It opens a stream for a device where the actual device
+ implementation needs to be provided by the application. If
+ successful, a pointer to the structure for the opened stream is
+ returned. Reasons for a possible failure currently include that
+ neither the \c put nor the \c get argument have been provided, thus
+ attempting to open a stream with no IO intent at all, or that
+ insufficient dynamic memory is available to establish a new stream.
+
+ If the \c put function pointer is provided, the stream is opened
+ with write intent. The function passed as \c put shall take one
+ character to write to the device as argument , and shall return 0
+ if the output was successful, and a nonzero value if the character
+ could not be sent to the device.
+
+ If the \c get function pointer is provided, the stream is opened
+ with read intent. The function passed as \c get shall take no
+ arguments, and return one character from the device, passed as an
+ \c int type. If an error occurs when trying to read from the
+ device, it shall return \c -1.
+
+ If both functions are provided, the stream is opened with read
+ and write intent.
+
+ The first stream opened with read intent is assigned to \c stdin,
+ and the first one opened with write intent is assigned to both,
+ \c stdout and \c stderr.
+
+ The third parameter \c opts is currently unused, but reserved for
+ future extensions. */
+
+FILE *
+fdevopen(int (*put)(char), int (*get)(void), int opts __attribute__((unused)))
+{
+ FILE *s;
+
+ if (put == 0 && get == 0)
+ return 0;
+
+ if ((s = calloc(1, sizeof(FILE))) == 0)
+ return 0;
+
+ if (get != 0) {
+ s->get = get;
+ s->flags = __SRD;
+ if (stdin == 0)
+ stdin = s;
+ }
+
+ if (put != 0) {
+ s->put = put;
+ s->flags |= __SWR;
+ if (stdout == 0) {
+ stdout = s;
+ if (stderr == 0)
+ stderr = s;
+ }
+ }
+
+ return s;
+}
--- /dev/null
+ .file "fdevopen.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+ .text\r
+.global fdevopen\r
+ .type fdevopen, @function\r
+fdevopen:\r
+/* prologue: frame size=10 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,10\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ std Y+3,r22\r
+ std Y+4,r23\r
+ std Y+5,r20\r
+ std Y+6,r21\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sbiw r24,0\r
+ brne .L7\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L7\r
+ std Y+9,__zero_reg__\r
+ std Y+10,__zero_reg__\r
+ rjmp .L6\r
+.L7:\r
+ ldi r22,lo8(12)\r
+ ldi r23,hi8(12)\r
+ ldi r24,lo8(1)\r
+ ldi r25,hi8(1)\r
+ rcall calloc\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sbiw r24,0\r
+ brne .L8\r
+ std Y+9,__zero_reg__\r
+ std Y+10,__zero_reg__\r
+ rjmp .L6\r
+.L8:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ breq .L9\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Z+10,r24\r
+ std Z+11,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldi r24,lo8(1)\r
+ std Z+3,r24\r
+ lds r24,__iob\r
+ lds r25,(__iob)+1\r
+ sbiw r24,0\r
+ brne .L9\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (__iob)+1,r25\r
+ sts __iob,r24\r
+.L9:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sbiw r24,0\r
+ breq .L11\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ std Z+8,r24\r
+ std Z+9,r25\r
+ ldd r26,Y+7\r
+ ldd r27,Y+8\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Z+3\r
+ ori r24,lo8(2)\r
+ mov r31,r27\r
+ mov r30,r26\r
+ std Z+3,r24\r
+ lds r24,__iob+2\r
+ lds r25,(__iob+2)+1\r
+ sbiw r24,0\r
+ brne .L11\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (__iob+2)+1,r25\r
+ sts __iob+2,r24\r
+ lds r24,__iob+4\r
+ lds r25,(__iob+4)+1\r
+ sbiw r24,0\r
+ brne .L11\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (__iob+4)+1,r25\r
+ sts __iob+4,r24\r
+.L11:\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+.L6:\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+/* epilogue: frame size=10 */\r
+ adiw r28,10\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function fdevopen size 125 (106) */\r
+ .size fdevopen, .-fdevopen\r
+ .comm __iob,6,1\r
+/* File "fdevopen.c": code 125 = 0x007d ( 106), prologues 10, epilogues 9 */\r
--- /dev/null
+/* Copyright (c) 2002, Marek Michalkiewicz <marekm@amelek.gda.pl>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+#if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
+#error "GCC version >= 3.3 required"
+#endif
+
+#include "macros.inc"
+
+ .macro vector name
+ .if (. - __vectors < _VECTORS_SIZE)
+ .weak \name
+ .set \name, __bad_interrupt
+ XJMP \name
+ .endif
+ .endm
+
+ .section .vectors,"ax",@progbits
+ .global __vectors
+ .func __vectors
+__vectors:
+ XJMP __init
+ vector __vector_1
+ vector __vector_2
+ vector __vector_3
+ vector __vector_4
+ vector __vector_5
+ vector __vector_6
+ vector __vector_7
+ vector __vector_8
+ vector __vector_9
+ vector __vector_10
+ vector __vector_11
+ vector __vector_12
+ vector __vector_13
+ vector __vector_14
+ vector __vector_15
+ vector __vector_16
+ vector __vector_17
+ vector __vector_18
+ vector __vector_19
+ vector __vector_20
+ vector __vector_21
+ vector __vector_22
+ vector __vector_23
+ vector __vector_24
+ vector __vector_25
+ vector __vector_26
+ vector __vector_27
+ vector __vector_28
+ vector __vector_29
+ vector __vector_30
+ vector __vector_31
+ vector __vector_32
+ vector __vector_33
+ vector __vector_34
+ vector __vector_35
+ vector __vector_36
+ vector __vector_37
+ vector __vector_38
+ vector __vector_39
+ .endfunc
+
+ /* Handle unexpected interrupts (enabled and no handler), which
+ usually indicate a bug. Jump to the __vector_default function
+ if defined by the user, otherwise jump to the reset address.
+
+ This must be in a different section, otherwise the assembler
+ will resolve "rjmp" offsets and there will be no relocs. */
+
+ .text
+ .global __bad_interrupt
+ .func __bad_interrupt
+__bad_interrupt:
+ .weak __vector_default
+ .set __vector_default, __vectors
+ XJMP __vector_default
+ .endfunc
+
+ .section .init0,"ax",@progbits
+ .weak __init
+; .func __init
+__init:
+
+#ifndef __AVR_ASM_ONLY__
+ .weak __stack
+ .set __stack, RAMEND
+
+ /* By default, malloc() uses the current value of the stack pointer
+ minus __malloc_margin as the highest available address.
+
+ In some applications with external SRAM, the stack can be below
+ the data section (in the internal SRAM - faster), and __heap_end
+ should be set to the highest address available for malloc(). */
+ .weak __heap_end
+ .set __heap_end, 0
+
+ .section .init2,"ax",@progbits
+ clr __zero_reg__
+ out _SFR_IO_ADDR(SREG), __zero_reg__
+ ldi r28,lo8(__stack)
+#ifdef SPH
+ ldi r29,hi8(__stack)
+ out _SFR_IO_ADDR(SPH), r29
+#endif
+ out _SFR_IO_ADDR(SPL), r28
+
+#if BIG_CODE
+ /* Only for >64K devices with RAMPZ, replaces the default code
+ provided by libgcc.S which is only linked in if necessary. */
+
+ .section .init4,"ax",@progbits
+ .global __do_copy_data
+__do_copy_data:
+ ldi r17, hi8(__data_end)
+ ldi r26, lo8(__data_start)
+ ldi r27, hi8(__data_start)
+ ldi r30, lo8(__data_load_start)
+ ldi r31, hi8(__data_load_start)
+
+ /* On the enhanced core, "elpm" with post-increment updates RAMPZ
+ automatically. Otherwise we have to handle it ourselves. */
+
+#ifdef __AVR_ENHANCED__
+ ldi r16, hh8(__data_load_start)
+#else
+ ldi r16, hh8(__data_load_start - 0x10000)
+.__do_copy_data_carry:
+ inc r16
+#endif
+ out _SFR_IO_ADDR(RAMPZ), r16
+ rjmp .__do_copy_data_start
+.__do_copy_data_loop:
+#ifdef __AVR_ENHANCED__
+ elpm r0, Z+
+#else
+ lpm
+#endif
+ st X+, r0
+#ifndef __AVR_ENHANCED__
+ adiw r30, 1
+ brcs .__do_copy_data_carry
+#endif
+.__do_copy_data_start:
+ cpi r26, lo8(__data_end)
+ cpc r27, r17
+ brne .__do_copy_data_loop
+#endif /* BIG_CODE */
+
+#endif /* !__AVR_ASM_ONLY__ */
+
+ .section .init9,"ax",@progbits
+ XJMP main
+; .endfunc
+
--- /dev/null
+# 1 "gcrt1.S"\r
+# 1 "<built-in>"\r
+# 1 "<command line>"\r
+# 1 "gcrt1.S"\r
+# 30 "gcrt1.S"\r
+# 1 "macros.inc" 1\r
+# 33 "macros.inc"\r
+# 1 "c:/WinAVR/avr/include/avr/io.h" 1 3\r
+# 81 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/sfr_defs.h" 1 3\r
+# 82 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 197 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/io4433.h" 1 3\r
+# 198 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 34 "macros.inc" 2\r
+# 124 "macros.inc"\r
+ .macro X_movw dest src\r
+ .if ((\src) - (\dest))\r
+ .if (((\src) | (\dest)) & 0x01)\r
+ .if (((\src)-(\dest)) & 0x80)\r
+ mov (\dest)+1, (\src)+1\r
+ mov (\dest), (\src)\r
+ .else\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+ .endif\r
+ .else\r
+\r
+\r
+\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+\r
+ .endif\r
+ .endif\r
+ .endm\r
+# 176 "macros.inc"\r
+ .macro LPM_R0_ZPLUS_INIT hhi\r
+\r
+\r
+\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZPLUS_NEXT hhi\r
+# 202 "macros.inc"\r
+ lpm\r
+ adiw r30,1\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZP\r
+\r
+\r
+\r
+ lpm\r
+ adiw r30,1\r
+\r
+ .endm\r
+# 31 "gcrt1.S" 2\r
+\r
+ .macro vector name\r
+ .if (. - __vectors < 28)\r
+ .weak \name\r
+ .set \name, __bad_interrupt\r
+ rjmp \name\r
+ .endif\r
+ .endm\r
+\r
+ .section .vectors,"ax",@progbits\r
+ .global __vectors\r
+ .func __vectors\r
+__vectors:\r
+ rjmp __init\r
+ vector __vector_1\r
+ vector __vector_2\r
+ vector __vector_3\r
+ vector __vector_4\r
+ vector __vector_5\r
+ vector __vector_6\r
+ vector __vector_7\r
+ vector __vector_8\r
+ vector __vector_9\r
+ vector __vector_10\r
+ vector __vector_11\r
+ vector __vector_12\r
+ vector __vector_13\r
+ vector __vector_14\r
+ vector __vector_15\r
+ vector __vector_16\r
+ vector __vector_17\r
+ vector __vector_18\r
+ vector __vector_19\r
+ vector __vector_20\r
+ vector __vector_21\r
+ vector __vector_22\r
+ vector __vector_23\r
+ vector __vector_24\r
+ vector __vector_25\r
+ vector __vector_26\r
+ vector __vector_27\r
+ vector __vector_28\r
+ vector __vector_29\r
+ vector __vector_30\r
+ vector __vector_31\r
+ vector __vector_32\r
+ vector __vector_33\r
+ vector __vector_34\r
+ vector __vector_35\r
+ vector __vector_36\r
+ vector __vector_37\r
+ vector __vector_38\r
+ vector __vector_39\r
+ .endfunc\r
+# 93 "gcrt1.S"\r
+ .text\r
+ .global __bad_interrupt\r
+ .func __bad_interrupt\r
+__bad_interrupt:\r
+ .weak __vector_default\r
+ .set __vector_default, __vectors\r
+ rjmp __vector_default\r
+ .endfunc\r
+\r
+ .section .init0,"ax",@progbits\r
+ .weak __init\r
+; .func __init\r
+__init:\r
+\r
+\r
+ .weak __stack\r
+ .set __stack, 0xDF\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ .weak __heap_end\r
+ .set __heap_end, 0\r
+\r
+ .section .init2,"ax",@progbits\r
+ clr r1\r
+ out ((((0x3F) + 0x20)) - 0x20), r1\r
+ ldi r28,lo8(__stack)\r
+\r
+\r
+\r
+\r
+ out ((((0x3D) + 0x20)) - 0x20), r28\r
+# 174 "gcrt1.S"\r
+ .section .init9,"ax",@progbits\r
+ rjmp main\r
+; .endfunc\r
--- /dev/null
+/* Copyright (c) 2002, Marek Michalkiewicz
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+/*
+ macros.inc - macros for use in assembler sources
+
+ Contributors:
+ Created by Marek Michalkiewicz <marekm@linux.org.pl>
+ */
+
+#include <avr/io.h>
+
+/* if not defined, assume old version with underscores */
+#ifndef __USER_LABEL_PREFIX__
+#define __USER_LABEL_PREFIX__ _
+#endif
+
+#ifndef __REGISTER_PREFIX__
+#define __REGISTER_PREFIX__
+#endif
+
+/* the assembler line separator (just in case it ever changes) */
+#define _L $
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+#define _U(x) CONCAT1(__USER_LABEL_PREFIX__, x)
+
+#define _R(x) CONCAT1(__REGISTER_PREFIX__, x)
+
+/* these should help to fix the "can't have function named r1()" bug
+ which may require adding '%' in front of register names. */
+
+#define r0 _R(r0)
+#define r1 _R(r1)
+#define r2 _R(r2)
+#define r3 _R(r3)
+#define r4 _R(r4)
+#define r5 _R(r5)
+#define r6 _R(r6)
+#define r7 _R(r7)
+#define r8 _R(r8)
+#define r9 _R(r9)
+#define r10 _R(r10)
+#define r11 _R(r11)
+#define r12 _R(r12)
+#define r13 _R(r13)
+#define r14 _R(r14)
+#define r15 _R(r15)
+#define r16 _R(r16)
+#define r17 _R(r17)
+#define r18 _R(r18)
+#define r19 _R(r19)
+#define r20 _R(r20)
+#define r21 _R(r21)
+#define r22 _R(r22)
+#define r23 _R(r23)
+#define r24 _R(r24)
+#define r25 _R(r25)
+#define r26 _R(r26)
+#define r27 _R(r27)
+#define r28 _R(r28)
+#define r29 _R(r29)
+#define r30 _R(r30)
+#define r31 _R(r31)
+
+#ifndef __tmp_reg__
+#define __tmp_reg__ r0
+#endif
+
+#ifndef __zero_reg__
+#define __zero_reg__ r1
+#endif
+
+#if __AVR_MEGA__
+ #define XJMP jmp
+ #define XCALL call
+#else
+ #define XJMP rjmp
+ #define XCALL rcall
+#endif
+
+/* used only by fplib/strtod.S - libgcc internal function calls */
+#define PROLOGUE_SAVES(offset) XJMP (__prologue_saves__ + 2 * (offset))
+#define EPILOGUE_RESTORES(offset) XJMP (__epilogue_restores__ + 2 * (offset))
+
+#if FLASHEND > 0x10000 /* ATmega103 */
+ #define BIG_CODE 1
+#else
+ #define BIG_CODE 0
+#endif
+
+/*
+ Smart version of movw (use register numbers as arguments):
+ - uses "movw" if possible (supported by MCU, and both registers even)
+ - handles overlapping register pairs correctly
+ - no instruction generated if source and destination are the same
+ (may expand to 0, 1 or 2 instructions).
+ */
+
+ .macro X_movw dest src
+ .if ((\src) - (\dest)) /* different registers */
+ .if (((\src) | (\dest)) & 0x01)
+ .if (((\src)-(\dest)) & 0x80) /* src < dest */
+ mov (\dest)+1, (\src)+1
+ mov (\dest), (\src)
+ .else /* src > dest */
+ mov (\dest), (\src)
+ mov (\dest)+1, (\src)+1
+ .endif
+ .else /* both even -> overlap not possible */
+#if __AVR_ENHANCED__
+ movw (\dest), (\src)
+#else
+ mov (\dest), (\src)
+ mov (\dest)+1, (\src)+1
+#endif
+ .endif
+ .endif
+ .endm
+
+#if __AVR_ENHANCED__
+ #define LOAD_X(lo, hi) movw r26, lo
+ #define LOAD_Z(lo, hi) movw r30, lo
+#else
+ #define LOAD_X(lo, hi) \
+ mov r26, lo _L\
+ mov r27, hi
+
+ #define LOAD_Z(lo, hi) \
+ mov r30, lo _L\
+ mov r31, hi
+#endif
+
+/* LOAD_X_CONST(p) loads constant P into pointer register X. */
+#define LOAD_X_CONST(p) \
+ ldi r26, lo8(p) _L\
+ ldi r27, hi8(p)
+
+/*
+ LPM_R0_ZPLUS_INIT is used before the loop to initialize RAMPZ
+ for future devices with RAMPZ:Z auto-increment - [e]lpm r0, Z+.
+
+ LPM_R0_ZPLUS_NEXT is used inside the loop to load a byte from
+ the program memory at [RAMPZ:]Z to R0, and increment [RAMPZ:]Z.
+
+ The argument in both macros is a register that contains the
+ high byte (bits 23-16) of the address, bits 15-0 should be in
+ the Z (r31:r30) register. It can be any register except for:
+ r0, r1 (__zero_reg__ - assumed to always contain 0), r30, r31.
+ */
+
+ .macro LPM_R0_ZPLUS_INIT hhi
+#if __AVR_ENHANCED__
+ #if BIG_CODE
+ out _SFR_IO_ADDR(RAMPZ), \hhi
+ #endif
+#endif
+ .endm
+
+ .macro LPM_R0_ZPLUS_NEXT hhi
+#if __AVR_ENHANCED__
+ #if BIG_CODE
+ /* ELPM with RAMPZ:Z post-increment, load RAMPZ only once */
+ elpm r0, Z+
+ #else
+ /* LPM with Z post-increment, max 64K, no RAMPZ (ATmega83/161/163/32) */
+ lpm r0, Z+
+ #endif
+#else
+ #if BIG_CODE
+ /* ELPM without post-increment, load RAMPZ each time (ATmega103) */
+ out _SFR_IO_ADDR(RAMPZ), \hhi
+ elpm
+ adiw r30,1
+ adc \hhi, __zero_reg__
+ #else
+ /* LPM without post-increment, max 64K, no RAMPZ (AT90S*) */
+ lpm
+ adiw r30,1
+ #endif
+#endif
+ .endm
+
+ .macro LPM_R0_ZP
+#if __AVR_ENHANCED__
+ lpm r0, Z+
+#else
+ lpm
+ adiw r30,1
+#endif
+ .endm
+
--- /dev/null
+/*
+ * Copyright (c) 2002 Joerg Wunsch
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id: malloc.c,v 1.6 2003/01/08 11:14:10 joerg_wunsch Exp $
+ */
+
+#include <stdlib.h>
+
+#include <avr/io.h>
+
+#ifndef __AVR__
+
+/*
+ * When compiling this file natively on a host machine, it will
+ * include a main() that performs a regression test. This is meant as
+ * a debugging aid, where a normal source-level debugger will help to
+ * verify that the various allocator structures have the desired
+ * appearance at each stage.
+ *
+ * When cross-compiling with avr-gcc, it will compile into just the
+ * library functions malloc() and free().
+ */
+#define MALLOC_TEST
+
+#endif /* !__AVR__ */
+
+struct freelist {
+ size_t sz;
+ struct freelist *nx;
+};
+
+static char *brkval;
+static struct freelist *flp;
+
+#ifdef MALLOC_TEST
+
+#define malloc mymalloc
+#define free myfree
+#define __heap_start mymem
+#define __heap_end ((char *)0)
+
+char mymem[256];
+#define STACK_POINTER() (mymem + 256)
+
+#else /* !MALLOC_TEST */
+
+extern char __heap_start;
+extern char __heap_end;
+
+#define STACK_POINTER() ((char *)SP)
+
+#endif /* MALLOC_TEST */
+
+/*
+ * Exported interface:
+ *
+ * When extending the data segment, the allocator will not try to go
+ * beyond the current stack limit, decreased by __malloc_margin bytes.
+ * Thus, all possible stack frames of interrupt routines that could
+ * interrupt the current function, plus all further nested function
+ * calls must not require more stack space, or they'll risk to collide
+ * with the data segment.
+ */
+
+/* May be changed by the user only before the first malloc() call. */
+
+size_t __malloc_margin = 32;
+char *__malloc_heap_start = &__heap_start;
+char *__malloc_heap_end = &__heap_end;
+
+void *
+malloc(size_t len)
+{
+ struct freelist *fp1, *fp2;
+ char *cp;
+ size_t s;
+
+ /*
+ * Our minimum chunk size is the size of a pointer (plus the
+ * size of the "sz" field, but we don't need to account for
+ * this), otherwise we could not possibly fit a freelist entry
+ * into the chunk later.
+ */
+ if (len < sizeof(struct freelist) - sizeof(size_t))
+ len = sizeof(struct freelist) - sizeof(size_t);
+
+ /*
+ * First, walk the free list and try finding a chunk that
+ * would match exactly. If we found one, we are done. While
+ * walking, note down the size of the largest chunk we found
+ * that would still fit the request -- we need it for step 2.
+ *
+ */
+ for (s = 0, fp1 = flp, fp2 = 0;
+ fp1;
+ fp2 = fp1, fp1 = fp1->nx) {
+ if (fp1->sz == len) {
+ /*
+ * Found it. Disconnect the chunk from the
+ * freelist, and return it.
+ */
+ if (fp2)
+ fp2->nx = fp1->nx;
+ else
+ flp = fp1->nx;
+ return &(fp1->nx);
+ }
+ if (fp1->sz > len) {
+ if (s == 0 || fp1->sz < s)
+ s = fp1->sz;
+ }
+ }
+ /*
+ * Step 2: If we found a chunk on the freelist that would fit
+ * (but was too large), look it up again and use it, since it
+ * is our closest match now. Since the freelist entry needs
+ * to be split into two entries then, watch out that the
+ * difference between the requested size and the size of the
+ * chunk found is large enough for another freelist entry; if
+ * not, just enlarge the request size to what we have found,
+ * and use the entire chunk.
+ */
+ if (s) {
+ if (s - len < sizeof(struct freelist))
+ len = s;
+ for (fp1 = flp, fp2 = 0;
+ fp1;
+ fp2 = fp1, fp1 = fp1->nx) {
+ if (fp1->sz == s) {
+ if (len == s) {
+ /*
+ * Use entire chunk; same as
+ * above.
+ */
+ if (fp2)
+ fp2->nx = fp1->nx;
+ else
+ flp = fp1->nx;
+ return &(fp1->nx);
+ }
+ /*
+ * Split them up. Note that we leave
+ * the first part as the new (smaller)
+ * freelist entry, and return the
+ * upper portion to the caller. This
+ * saves us the work to fix up the
+ * freelist chain; we just need to
+ * fixup the size of the current
+ * entry, and note down the size of
+ * the new chunk before returning it
+ * to the caller.
+ */
+ cp = (char *)fp1;
+ s -= len;
+ cp += s;
+ fp2 = (struct freelist *)cp;
+ fp2->sz = len;
+ fp1->sz = s - sizeof(size_t);
+ return &(fp2->nx);
+ }
+ }
+ }
+ /*
+ * Step 3: If the request could not be satisfied from a
+ * freelist entry, just prepare a new chunk. This means we
+ * need to obtain more memory first. The largest address just
+ * not allocated so far is remembered in the brkval variable.
+ * Under Unix, the "break value" was the end of the data
+ * segment as dynamically requested from the operating system.
+ * Since we don't have an operating system, just make sure
+ * that we don't collide with the stack.
+ */
+ if (brkval == 0)
+ brkval = __malloc_heap_start;
+ cp = __malloc_heap_end;
+ if (cp == 0)
+ cp = STACK_POINTER() - __malloc_margin;
+ if (brkval + len + sizeof(size_t) < cp) {
+ fp1 = (struct freelist *)brkval;
+ brkval += len + sizeof(size_t);
+ fp1->sz = len;
+ return &(fp1->nx);
+ }
+ /*
+ * Step 4: There's no help, just fail. :-/
+ */
+ return 0;
+}
+
+void
+free(void *p)
+{
+ struct freelist *fp1, *fp2, *fpnew;
+ char *cp1, *cp2, *cpnew;
+
+ /* ISO C says free(NULL) must be a no-op */
+ if (p == 0)
+ return;
+
+ cpnew = p;
+ cpnew -= sizeof(size_t);
+ fpnew = (struct freelist *)cpnew;
+ fpnew->nx = 0;
+
+ /*
+ * Trivial case first: if there's no freelist yet, our entry
+ * will be the only one on it.
+ */
+ if (flp == 0) {
+ flp = fpnew;
+ return;
+ }
+
+ /*
+ * Now, find the position where our new entry belongs onto the
+ * freelist. Try to aggregate the chunk with adjacent chunks
+ * if possible.
+ */
+ for (fp1 = flp, fp2 = 0;
+ fp1;
+ fp2 = fp1, fp1 = fp1->nx) {
+ if (fp1 < fpnew)
+ continue;
+ cp1 = (char *)fp1;
+ fpnew->nx = fp1;
+ if ((char *)&(fpnew->nx) + fpnew->sz == cp1) {
+ /* upper chunk adjacent, assimilate it */
+ fpnew->sz += fp1->sz + sizeof(size_t);
+ fpnew->nx = fp1->nx;
+ }
+ if (fp2 == 0) {
+ /* new head of freelist */
+ flp = fpnew;
+ return;
+ }
+ break;
+ }
+ /*
+ * Note that we get here either if we hit the "break" above,
+ * or if we fell off the end of the loop. The latter means
+ * we've got a new topmost chunk. Either way, try aggregating
+ * with the lower chunk if possible.
+ */
+ fp2->nx = fpnew;
+ cp2 = (char *)&(fp2->nx);
+ if (cp2 + fp2->sz == cpnew) {
+ /* lower junk adjacent, merge */
+ fp2->sz += fpnew->sz + sizeof(size_t);
+ fp2->nx = fpnew->nx;
+ }
+}
+
+#ifdef MALLOC_TEST
+
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+
+void *handles[32];
+size_t sizes[32];
+
+
+void *
+alloc(size_t s)
+{
+ void *p;
+
+ if ((p = malloc(s)) == 0)
+ return 0;
+ memset(p, 0xd0, s);
+ return p;
+}
+
+void
+printfreelist(void)
+{
+ struct freelist *fp1;
+ int i;
+
+ if (!flp) {
+ printf("no free list\n");
+ return;
+ }
+
+ for (i = 0, fp1 = flp; fp1; i++, fp1 = fp1->nx) {
+ printf("entry %d @ %u: size %u, next ",
+ i, (char *)fp1 - mymem, fp1->sz);
+ if (fp1->nx)
+ printf("%u\n", (char *)fp1->nx - mymem);
+ else
+ printf("NULL\n");
+ }
+}
+
+int
+compare(const void *p1, const void *p2)
+{
+ return *((size_t *)p1) - *((size_t *)p2);
+}
+
+void
+printalloc(void)
+{
+ int i, j, k;
+ size_t sum, sum2;
+ void *sortedhandles[32];
+ struct freelist *fp;
+ char *cp;
+
+ for (i = j = k = sum = sum2 = 0;
+ i < sizeof handles / sizeof (void *);
+ i++)
+ if (sizes[i]) {
+ j++;
+ sum += sizes[i];
+ if (handles[i]) {
+ k++;
+ sum2 += sizes[i];
+ }
+ }
+ printf("brkval: %d, %d request%s => sum %u bytes "
+ "(actually %d reqs => %u bytes)\n",
+ (char *)brkval - mymem, j, j == 1? "": "s", sum, k, sum2);
+ memcpy(sortedhandles, handles, sizeof sortedhandles);
+ qsort(sortedhandles, 32, sizeof(void *), compare);
+ for (i = j = 0; i < sizeof sortedhandles / sizeof (void *); i++)
+ if ((cp = sortedhandles[i])) {
+ cp -= sizeof(size_t);
+ fp = (struct freelist *)cp;
+ printf("block %d @ %u: %u bytes\n",
+ j, (char *)&fp->nx - mymem, fp->sz);
+ j++;
+ }
+
+}
+
+
+int
+main(void)
+{
+ int i, j, k, l, m, om, p, f;
+ size_t s;
+
+ srand(time(0) ^ getpid());
+
+ for (k = 0; k < 100; k++) {
+ memset(handles, 0, sizeof handles);
+ memset(sizes, 0, sizeof sizes);
+
+ j = rand() % 16 + 15;
+ l = rand() % 80 + 7;
+
+ for (i = s = 0; i < j && s < 256; i++) {
+ sizes[i] = rand() % l + 1;
+ s += sizes[i];
+ }
+ j = i;
+ for (m = om = 1, p = 1, f = 0; m < 1000; m++) {
+ for (i = s = 0; i < j; i++)
+ if (handles[i])
+ s++;
+ if (s == j)
+ break;
+
+ if (m / om > 10) {
+ p <<= 1;
+ p |= 1;
+ }
+
+ for (i = 0; i < j; i++)
+ if (rand() & p) {
+ if (!handles[i] &&
+ (handles[i] = alloc(sizes[i])) == 0)
+ f++;
+ }
+ for (i = 0; i < j; i++)
+ if (rand() & 1) {
+ free(handles[i]);
+ handles[i] = 0;
+ }
+ }
+ if (f)
+ printf("%d alloc failure%s total\n",
+ f, f == 1? "": "s");
+ printf("After alloc:\n");
+ printalloc();
+ printfreelist();
+ for (i = 0; i < j; i++)
+ free(handles[i]);
+ printf("After cleanup:\n");
+ printfreelist();
+ }
+
+ return 0;
+}
+
+#endif /* MALLOC_TEST */
+
--- /dev/null
+ .file "malloc.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+.global __malloc_margin\r
+ .data\r
+ .type __malloc_margin, @object\r
+ .size __malloc_margin, 2\r
+__malloc_margin:\r
+ .word 32\r
+.global __malloc_heap_start\r
+ .type __malloc_heap_start, @object\r
+ .size __malloc_heap_start, 2\r
+__malloc_heap_start:\r
+ .word __heap_start\r
+.global __malloc_heap_end\r
+ .type __malloc_heap_end, @object\r
+ .size __malloc_heap_end, 2\r
+__malloc_heap_end:\r
+ .word __heap_end\r
+ .text\r
+.global malloc\r
+ .type malloc, @function\r
+malloc:\r
+/* prologue: frame size=14 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ cpi r24,2\r
+ cpc r25,__zero_reg__\r
+ brsh .L7\r
+ ldi r24,lo8(2)\r
+ ldi r25,hi8(2)\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+.L7:\r
+ std Y+9,__zero_reg__\r
+ std Y+10,__zero_reg__\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ std Y+5,__zero_reg__\r
+ std Y+6,__zero_reg__\r
+.L8:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L11\r
+ rjmp .L9\r
+.L11:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L12\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ breq .L13\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r26,Y+3\r
+ ldd r27,Y+4\r
+ mov r31,r27\r
+ mov r30,r26\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ ldd r30,Y+13\r
+ ldd r31,Y+14\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ rjmp .L14\r
+.L13:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+.L14:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L12:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ cp r24,r18\r
+ cpc r25,r19\r
+ brsh .L10\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ sbiw r24,0\r
+ breq .L17\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brlo .L17\r
+ rjmp .L10\r
+.L17:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r24,Z\r
+ ldd r25,Z+1\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+.L10:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ rjmp .L8\r
+.L9:\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ sbiw r24,0\r
+ brne .+2\r
+ rjmp .L18\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ ldd r18,Y+1\r
+ ldd r19,Y+2\r
+ sub r24,r18\r
+ sbc r25,r19\r
+ cpi r24,4\r
+ cpc r25,__zero_reg__\r
+ brsh .L19\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+.L19:\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ std Y+5,__zero_reg__\r
+ std Y+6,__zero_reg__\r
+.L20:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L23\r
+ rjmp .L18\r
+.L23:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ breq .+2\r
+ rjmp .L22\r
+ ldd r18,Y+1\r
+ ldd r19,Y+2\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ breq .L26\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r26,Y+3\r
+ ldd r27,Y+4\r
+ mov r31,r27\r
+ mov r30,r26\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ ldd r30,Y+13\r
+ ldd r31,Y+14\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ rjmp .L27\r
+.L26:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+.L27:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L25:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r18,Y+9\r
+ ldd r19,Y+10\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sub r18,r24\r
+ sbc r19,r25\r
+ mov r25,r19\r
+ mov r24,r18\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+ ldd r18,Y+7\r
+ ldd r19,Y+8\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ add r24,r18\r
+ adc r25,r19\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ sbiw r24,2\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L22:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ rjmp .L20\r
+.L18:\r
+ lds r24,brkval\r
+ lds r25,(brkval)+1\r
+ sbiw r24,0\r
+ brne .L28\r
+ lds r24,__malloc_heap_start\r
+ lds r25,(__malloc_heap_start)+1\r
+ sts (brkval)+1,r25\r
+ sts brkval,r24\r
+.L28:\r
+ lds r24,__malloc_heap_end\r
+ lds r25,(__malloc_heap_end)+1\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sbiw r24,0\r
+ brne .L29\r
+ lds r24,93\r
+ mov r18,r24\r
+ clr r19\r
+ lds r24,__malloc_margin\r
+ lds r25,(__malloc_margin)+1\r
+ sub r18,r24\r
+ sbc r19,r25\r
+ mov r25,r19\r
+ mov r24,r18\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+.L29:\r
+ lds r18,brkval\r
+ lds r19,(brkval)+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ add r24,r18\r
+ adc r25,r19\r
+ mov r18,r24\r
+ mov r19,r25\r
+ subi r18,lo8(-(2))\r
+ sbci r19,hi8(-(2))\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brsh .L30\r
+ lds r24,brkval\r
+ lds r25,(brkval)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ lds r18,brkval\r
+ lds r19,(brkval)+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ add r24,r18\r
+ adc r25,r19\r
+ adiw r24,2\r
+ sts (brkval)+1,r25\r
+ sts brkval,r24\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L30:\r
+ std Y+11,__zero_reg__\r
+ std Y+12,__zero_reg__\r
+.L6:\r
+ ldd r24,Y+11\r
+ ldd r25,Y+12\r
+/* epilogue: frame size=14 */\r
+ adiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function malloc size 354 (335) */\r
+ .size malloc, .-malloc\r
+.global free\r
+ .type free, @function\r
+free:\r
+/* prologue: frame size=14 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sbiw r24,0\r
+ brne .L32\r
+ rjmp .L31\r
+.L32:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r24,Y+13\r
+ ldd r25,Y+14\r
+ sbiw r24,2\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r24,Y+13\r
+ ldd r25,Y+14\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ std Z+2,__zero_reg__\r
+ std Z+3,__zero_reg__\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ sbiw r24,0\r
+ brne .L33\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+ rjmp .L31\r
+.L33:\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ std Y+5,__zero_reg__\r
+ std Y+6,__zero_reg__\r
+.L34:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L37\r
+ rjmp .L35\r
+.L37:\r
+ ldd r18,Y+3\r
+ ldd r19,Y+4\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brsh .L38\r
+ rjmp .L36\r
+.L38:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r18,Y+7\r
+ ldd r19,Y+8\r
+ ld r24,Z\r
+ ldd r25,Z+1\r
+ add r24,r18\r
+ adc r25,r19\r
+ mov r18,r24\r
+ mov r19,r25\r
+ subi r18,lo8(-(2))\r
+ sbci r19,hi8(-(2))\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L39\r
+ ldd r20,Y+7\r
+ ldd r21,Y+8\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r26,Y+3\r
+ ldd r27,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ld r24,X+\r
+ ld r25,X\r
+ add r24,r18\r
+ adc r25,r19\r
+ adiw r24,2\r
+ mov r31,r21\r
+ mov r30,r20\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r26,Y+7\r
+ ldd r27,Y+8\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ mov r31,r27\r
+ mov r30,r26\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+.L39:\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ brne .L35\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+ rjmp .L31\r
+.L36:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ rjmp .L34\r
+.L35:\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r18,Y+11\r
+ ldd r19,Y+12\r
+ ld r24,Z\r
+ ldd r25,Z+1\r
+ add r18,r24\r
+ adc r19,r25\r
+ ldd r24,Y+13\r
+ ldd r25,Y+14\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L31\r
+ ldd r20,Y+5\r
+ ldd r21,Y+6\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r26,Y+7\r
+ ldd r27,Y+8\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ld r24,X+\r
+ ld r25,X\r
+ add r24,r18\r
+ adc r25,r19\r
+ adiw r24,2\r
+ mov r31,r21\r
+ mov r30,r20\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r26,Y+5\r
+ ldd r27,Y+6\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ mov r31,r27\r
+ mov r30,r26\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+.L31:\r
+/* epilogue: frame size=14 */\r
+ adiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function free size 204 (185) */\r
+ .size free, .-free\r
+ .lcomm brkval,2\r
+ .lcomm flp,2\r
+/* File "malloc.c": code 558 = 0x022e ( 520), prologues 20, epilogues 18 */\r
--- /dev/null
+/* Copyright (c) 2002, Marek Michalkiewicz
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+#include "macros.inc"
+
+#define dest_hi r25
+#define dest_lo r24
+; #define val_hi r23
+#define val_lo r22
+#define len_hi r21
+#define len_lo r20
+
+/** \ingroup avr_string
+ \fn void *memset(void *dest, int val, size_t len)
+ \brief Fill memory with a constant byte.
+
+ The memset() function fills the first len bytes of the memory area pointed
+ to by dest with the constant byte val.
+
+ \returns The memset() function returns a pointer to the memory area dest. */
+
+ .text
+ .global _U(memset)
+ .type _U(memset), @function
+_U(memset):
+ LOAD_X(dest_lo, dest_hi)
+#if OPTIMIZE_SPEED
+; 11 words, (12 + len * 4 - (len & 1)) cycles
+ sbrs len_lo, 0
+ rjmp .memset_start
+ rjmp .memset_odd
+.memset_loop:
+ st X+, val_lo
+.memset_odd:
+ st X+, val_lo
+.memset_start:
+ subi len_lo, lo8(2)
+ sbci len_hi, hi8(2)
+#else
+; 8 words, (11 + len * 6) cycles
+ rjmp .memset_start
+.memset_loop:
+ st X+, val_lo
+.memset_start:
+ subi len_lo, lo8(1)
+ sbci len_hi, hi8(1)
+#endif
+ brcc .memset_loop
+; return dest (unchanged)
+ ret
+.memset_end:
+ .size _U(memset), .memset_end - _U(memset)
+
--- /dev/null
+# 1 "memset.S"\r
+# 1 "<built-in>"\r
+# 1 "<command line>"\r
+# 1 "memset.S"\r
+# 29 "memset.S"\r
+# 1 "macros.inc" 1\r
+# 33 "macros.inc"\r
+# 1 "c:/WinAVR/avr/include/avr/io.h" 1 3\r
+# 81 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/sfr_defs.h" 1 3\r
+# 82 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 197 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/io4433.h" 1 3\r
+# 198 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 34 "macros.inc" 2\r
+# 124 "macros.inc"\r
+ .macro X_movw dest src\r
+ .if ((\src) - (\dest))\r
+ .if (((\src) | (\dest)) & 0x01)\r
+ .if (((\src)-(\dest)) & 0x80)\r
+ mov (\dest)+1, (\src)+1\r
+ mov (\dest), (\src)\r
+ .else\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+ .endif\r
+ .else\r
+\r
+\r
+\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+\r
+ .endif\r
+ .endif\r
+ .endm\r
+# 176 "macros.inc"\r
+ .macro LPM_R0_ZPLUS_INIT hhi\r
+\r
+\r
+\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZPLUS_NEXT hhi\r
+# 202 "macros.inc"\r
+ lpm\r
+ adiw r30,1\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZP\r
+\r
+\r
+\r
+ lpm\r
+ adiw r30,1\r
+\r
+ .endm\r
+# 30 "memset.S" 2\r
+\r
+\r
+\r
+; #define val_hi r23\r
+# 47 "memset.S"\r
+ .text\r
+ .global memset\r
+ .type memset, @function\r
+memset:\r
+ mov r26, r24 $ mov r27, r25\r
+# 65 "memset.S"\r
+; 8 words, (11 + len * 6) cycles\r
+ rjmp .memset_start\r
+.memset_loop:\r
+ st X+, r22\r
+.memset_start:\r
+ subi r20, lo8(1)\r
+ sbci r21, hi8(1)\r
+\r
+ brcc .memset_loop\r
+; return dest (unchanged)\r
+ ret\r
+.memset_end:\r
+ .size memset, .memset_end - memset\r
--- /dev/null
+/* Copyright (c) 2002, Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* $Id: stdio_private.h,v 1.6 2003/01/07 22:17:24 joerg_wunsch Exp $ */
+
+#include <inttypes.h>
+#include <stdio.h>
+
+struct __file {
+ char *buf; /* buffer pointer */
+ unsigned char unget; /* ungetc() buffer */
+ uint8_t flags; /* flags, see below */
+#define __SRD 0x0001 /* OK to read */
+#define __SWR 0x0002 /* OK to write */
+#define __SSTR 0x0004 /* this is an sprintf/snprintf string */
+#define __SPGM 0x0008 /* fmt string is in progmem */
+#define __SERR 0x0010 /* found error */
+#define __SEOF 0x0020 /* found EOF */
+#define __SUNGET 0x040 /* ungetc() happened */
+#if 0
+/* possible future extensions, will require uint16_t flags */
+#define __SRW 0x0080 /* open for reading & writing */
+#define __SLBF 0x0100 /* line buffered */
+#define __SNBF 0x0200 /* unbuffered */
+#define __SMBF 0x0400 /* buf is from malloc */
+#endif
+ int size; /* size of buffer */
+ int len; /* characters read or written so far */
+ int (*put)(char); /* function to write one char to device */
+ int (*get)(void); /* function to read one char from device */
+};
+
+/* values for PRINTF_LEVEL */
+#define PRINTF_MIN 1
+#define PRINTF_STD 2
+#define PRINTF_FLT 3
+
+/* values for SCANF_LEVEL */
+#define SCANF_MIN 1
+#define SCANF_STD 2
+#define SCANF_FLT 3
--- /dev/null
+# Simple Makefile\r
+# Volker Oth (c) 1999\r
+\r
+\r
+########### change this lines according to your project ##################\r
+\r
+#put the name of the target mcu here (at90s8515, at90s8535, attiny22, atmega603 etc.)\r
+ MCU = at90s4433\r
+\r
+#put the name of the target file here (without extension)\r
+ TRG = hello\r
+\r
+#put your C sourcefiles here \r
+# SRC = uart.c $(TRG).c\r
+ SRC = $(TRG).c\r
+\r
+#put additional assembler source file here\r
+ ASRC =\r
+\r
+#additional libraries and object files to link\r
+ LIB = \r
+\r
+#additional includes to compile\r
+ INC = \r
+\r
+#compiler flags\r
+ CPFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+\r
+#linker flags\r
+ LDFLAGS = -Wl,-Map=$(TRG).map,--cref\r
+\r
+########### you should not need to change the following line #############\r
+include avr_make\r
+ \r
+###### dependecies, add any dependencies you need here ###################\r
+\r
+#uart.o : uart.c uart.h\r
+$(TRG).o : $(TRG).c\r
--- /dev/null
+# Simple Makefile\r
+# Volker Oth (c) 1999\r
+\r
+\r
+########### change this lines according to your project ##################\r
+\r
+#put the name of the target mcu here (at90s8515, at90s8535, attiny22, atmega603 etc.)\r
+ MCU = at90s4433\r
+\r
+#put the name of the target file here (without extension)\r
+ TRG = hello\r
+\r
+#put your C sourcefiles here \r
+# SRC = uart.c $(TRG).c\r
+ SRC = $(TRG).c\r
+\r
+#put additional assembler source file here\r
+ ASRC =\r
+\r
+#additional libraries and object files to link\r
+ LIB = \r
+\r
+#additional includes to compile\r
+ INC = \r
+\r
+#compiler flags\r
+ CPFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+\r
+#linker flags\r
+ LDFLAGS = -Wl,-Map=$(TRG).map,--cref\r
+\r
+########### you should not need to change the following line #############\r
+include avr_make\r
+ \r
+###### dependecies, add any dependencies you need here ###################\r
+\r
+#uart.o : uart.c uart.h\r
+$(TRG).o : $(TRG).c\r
+ mv $(TRG).o $(TRG).obj\r
--- /dev/null
+avr-gcc -mmcu=at90s4433 -Wa,-a=nick -Wl,--oformat,ihex,-M hello.c -o hello.hex > hello.map
+copy hello.hex a:\
--- /dev/null
+GAS LISTING C:\cygwin\tmp/ccmeaaaa.s page 1\r
+\r
+\r
+ 1 .file "gcctest7.c"\r
+ 2 .arch at90s4433\r
+ 3 __SREG__ = 0x3f\r
+ 4 __SP_H__ = 0x3e\r
+ 5 __SP_L__ = 0x3d\r
+ 6 __tmp_reg__ = 0\r
+ 7 __zero_reg__ = 1\r
+ 8 .global __do_copy_data\r
+ 9 .global __do_clear_bss\r
+ 10 .section .progmem.data,"a",@progbits\r
+ 11 .type __c.0, @object\r
+ 12 .size __c.0, 14\r
+ 13 __c.0:\r
+ 14 0000 4865 6C6C .string "Hello World !"\r
+ 14 6F20 576F \r
+ 14 726C 6420 \r
+ 14 2100 \r
+ 15 .type __c.1, @object\r
+ 16 .size __c.1, 17\r
+ 17 __c.1:\r
+ 18 000e 5072 6573 .string "Press any key..."\r
+ 18 7320 616E \r
+ 18 7920 6B65 \r
+ 18 792E 2E2E \r
+ 18 00\r
+ 19 .type __c.2, @object\r
+ 20 .size __c.2, 14\r
+ 21 __c.2:\r
+ 22 001f 596F 7520 .string "You pressed '"\r
+ 22 7072 6573 \r
+ 22 7365 6420 \r
+ 22 2700 \r
+ 23 .type __c.3, @object\r
+ 24 .size __c.3, 14\r
+ 25 __c.3:\r
+ 26 002d 2720 7768 .string "' which is 0x"\r
+ 26 6963 6820 \r
+ 26 6973 2030 \r
+ 26 7800 \r
+ 27 .type __c.4, @object\r
+ 28 .size __c.4, 17\r
+ 29 __c.4:\r
+ 30 003b 2069 6E20 .string " in hexadecimal."\r
+ 30 6865 7861 \r
+ 30 6465 6369 \r
+ 30 6D61 6C2E \r
+ 30 00\r
+ 31 .text\r
+ 32 .global main\r
+ 33 .type main, @function\r
+ 34 main:\r
+ 35 /* prologue: frame size=1 */\r
+ 36 0000 C0E0 ldi r28,lo8(__stack - 1)\r
+ 37 0002 D0E0 ldi r29,hi8(__stack - 1)\r
+ 38 0004 DEBF out __SP_H__,r29\r
+ 39 0006 CDBF out __SP_L__,r28\r
+ 40 /* prologue end (size=4) */\r
+\fGAS LISTING C:\cygwin\tmp/ccmeaaaa.s page 2\r
+\r
+\r
+ 41 0008 00D0 rcall UART_Init\r
+ 42 000a 80E0 ldi r24,lo8(__c.0)\r
+ 43 000c 90E0 ldi r25,hi8(__c.0)\r
+ 44 000e 00D0 rcall UART_PrintfProgStr\r
+ 45 0010 00D0 rcall UART_PrintfEndOfLine\r
+ 46 .L3:\r
+ 47 0012 80E0 ldi r24,lo8(__c.1)\r
+ 48 0014 90E0 ldi r25,hi8(__c.1)\r
+ 49 0016 00D0 rcall UART_PrintfProgStr\r
+ 50 0018 00D0 rcall UART_PrintfEndOfLine\r
+ 51 001a 00D0 rcall UART_ReceiveByte\r
+ 52 001c 8983 std Y+1,r24\r
+ 53 001e 80E0 ldi r24,lo8(__c.2)\r
+ 54 0020 90E0 ldi r25,hi8(__c.2)\r
+ 55 0022 00D0 rcall UART_PrintfProgStr\r
+ 56 0024 8981 ldd r24,Y+1\r
+ 57 0026 00D0 rcall UART_SendByte\r
+ 58 0028 80E0 ldi r24,lo8(__c.3)\r
+ 59 002a 90E0 ldi r25,hi8(__c.3)\r
+ 60 002c 00D0 rcall UART_PrintfProgStr\r
+ 61 002e 8981 ldd r24,Y+1\r
+ 62 0030 00D0 rcall UART_Printfu08\r
+ 63 0032 80E0 ldi r24,lo8(__c.4)\r
+ 64 0034 90E0 ldi r25,hi8(__c.4)\r
+ 65 0036 00D0 rcall UART_PrintfProgStr\r
+ 66 0038 00D0 rcall UART_PrintfEndOfLine\r
+ 67 003a EBCF rjmp .L3\r
+ 68 /* epilogue: frame size=1 */\r
+ 69 /* epilogue: noreturn */\r
+ 70 /* epilogue end (size=0) */\r
+ 71 /* function main size 30 (26) */\r
+ 72 .size main, .-main\r
+ 73 /* File "gcctest7.c": code 30 = 0x001e ( 26), prologues 4, epilogues 0 */\r
+\fGAS LISTING C:\cygwin\tmp/ccmeaaaa.s page 3\r
+\r
+\r
+DEFINED SYMBOLS\r
+ *ABS*:00000000 gcctest7.c\r
+ *ABS*:0000003f __SREG__\r
+ *ABS*:0000003e __SP_H__\r
+ *ABS*:0000003d __SP_L__\r
+ *ABS*:00000000 __tmp_reg__\r
+ *ABS*:00000001 __zero_reg__\r
+C:\cygwin\tmp/ccmeaaaa.s:13 .progmem.data:00000000 __c.0\r
+C:\cygwin\tmp/ccmeaaaa.s:17 .progmem.data:0000000e __c.1\r
+C:\cygwin\tmp/ccmeaaaa.s:21 .progmem.data:0000001f __c.2\r
+C:\cygwin\tmp/ccmeaaaa.s:25 .progmem.data:0000002d __c.3\r
+C:\cygwin\tmp/ccmeaaaa.s:29 .progmem.data:0000003b __c.4\r
+C:\cygwin\tmp/ccmeaaaa.s:34 .text:00000000 main\r
+\r
+UNDEFINED SYMBOLS\r
+__do_copy_data\r
+__do_clear_bss\r
+__stack\r
+UART_Init\r
+UART_PrintfProgStr\r
+UART_PrintfEndOfLine\r
+UART_ReceiveByte\r
+UART_SendByte\r
+UART_Printfu08\r
--- /dev/null
+revava -e hello.hex -o hello.s
--- /dev/null
+avr-gcc -mmcu=at90s4433 -S hello.c
--- /dev/null
+#!/bin/sh
+avr-gcc -S -g -Wall -Wstrict-prototypes -Wa,-ahlms=hello.lst -mmcu=at90s4433 -I. hello.c -o hello.s
+avr-gcc -c -g -Wall -Wstrict-prototypes -Wa,-ahlms=hello.lst -mmcu=at90s4433 -I. hello.c -o hello.o
+avr-gcc hello.o -Wl,-Map=hello.map,--cref -mmcu=at90s4433 -o hello.elf
+avr-objcopy -O ihex hello.elf hello.hex
+avr-objcopy -j .eeprom --set-section-flags .eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex hello.elf hello.eep
+
--- /dev/null
+#!/bin/sh
+avr-gcc -S -g -Wall -Wstrict-prototypes -Wa,-ahlms=hello.lst -mmcu=at90s4433 -I. hello.c -o hello.s
+avr-gcc -c -g -Wall -Wstrict-prototypes -Wa,-ahlms=hello.lst -mmcu=at90s4433 -I. hello.c -o hello.o
+avr-gcc hello.o -Wl,-Map=hello.map,--cref -mmcu=at90s4433 -o hello.elf
+avr-objcopy -O ihex hello.elf hello.hex
+avr-objcopy -j .eeprom --set-section-flags .eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex hello.elf hello.eep
+
--- /dev/null
+# GCC-AVR standard makefile\r
+# Based on AVRfreaks.net January 2000 sample makefile\r
+# For compilation under Microsoft Windows environment\r
+\r
+# Variables definitions\r
+ CC = avr-gcc\r
+ AS = avr-gcc -x assembler-with-cpp \r
+ RM = rm -f\r
+ RN = mv\r
+ BIN = avr-objcopy\r
+ SIZE = avr-size\r
+ INCDIR = .\r
+ LIBDIR = avr/lib\r
+ SHELL = sh.exe\r
+\r
+# Output format (srec or ihex, avrobj is always created)\r
+ FORMAT = ihex \r
+\r
+# Project specific object files\r
+ OBJ = $(ASRC:.s=.o) $(SRC:.c=.o) \r
+ CPFLAGS += -mmcu=$(MCU)\r
+ ASFLAGS += -mmcu=$(MCU)\r
+ LDFLAGS += -mmcu=$(MCU)\r
+ \r
+# Define make process\r
+\r
+#all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok \r
+all: $(TRG).s $(TRG).elf $(TRG).hex $(TRG).eep $(TRG).ok\r
+%.o : %.c \r
+ $(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.s : %.c\r
+ $(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.o : %.s\r
+ $(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@\r
+%.elf: $(OBJ)\r
+ $(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@\r
+%.obj: %.elf\r
+ $(BIN) -O avrobj -R .eeprom $< $@\r
+%.rom: %.elf\r
+ $(BIN) -O $(FORMAT) -R .eeprom $< $@\r
+#%.eep: %.elf\r
+# $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.eep: %.elf\r
+ $(BIN) -j .eeprom --set-section-flags .eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.hex: %.elf\r
+ $(BIN) -O ihex $< $@\r
+\r
+# No error message if successfully compiled\r
+%ok:\r
+ @echo "Errors: none" \r
+\r
+# Clean up directory\r
+clean:\r
+ $(RM) $(OBJ)\r
+ $(RM) $(SRC:.c=.s)\r
+ $(RM) $(SRC:.c=.lst)\r
+ $(RM) $(TRG).map\r
+ $(RM) $(TRG).elf\r
+\r
+ $(RM) $(TRG).obj\r
+ $(RM) $(TRG).a90\r
+ $(RM) $(TRG).hex \r
+ $(RM) *.bak\r
+ $(RM) *.log\r
+ \r
+size:\r
+ $(SIZE) $(TRG).elf\r
+ \r
--- /dev/null
+# GCC-AVR standard makefile\r
+# Based on AVRfreaks.net January 2000 sample makefile\r
+# For compilation under Microsoft Windows environment\r
+\r
+# Variables definitions\r
+ CC = avr-gcc\r
+ AS = avr-gcc -x assembler-with-cpp \r
+ RM = rm -f\r
+ RN = mv\r
+ BIN = avr-objcopy\r
+ SIZE = avr-size\r
+ INCDIR = .\r
+ LIBDIR = avr/lib\r
+ SHELL = sh.exe\r
+\r
+# Output format (srec or ihex, avrobj is always created)\r
+ FORMAT = ihex \r
+\r
+# Project specific object files\r
+ OBJ = $(ASRC:.s=.o) $(SRC:.c=.o) \r
+ CPFLAGS += -mmcu=$(MCU)\r
+ ASFLAGS += -mmcu=$(MCU)\r
+ LDFLAGS += -mmcu=$(MCU)\r
+ \r
+# Define make process\r
+\r
+#all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok \r
+all: $(TRG).s $(TRG).elf $(TRG).hex $(TRG).eep $(TRG).ok\r
+%.o : %.c \r
+ $(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.s : %.c\r
+ $(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.o : %.s\r
+ $(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@\r
+%.elf: $(OBJ)\r
+ $(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@\r
+%.obj: %.elf\r
+ $(BIN) -O avrobj -R .eeprom $< $@\r
+%.rom: %.elf\r
+ $(BIN) -O $(FORMAT) -R .eeprom $< $@\r
+#%.eep: %.elf\r
+# $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.eep: %.elf\r
+ $(BIN) -j .eeprom --set-section-flags .eeprom="alloc,load" --section-lma --set-section-flags .eeprom=0 -O $(FORMAT) $< $@\r
+%.hex: %.elf\r
+ $(BIN) -O ihex $< $@\r
+\r
+# No error message if successfully compiled\r
+%ok:\r
+ @echo "Errors: none" \r
+\r
+# Clean up directory\r
+clean:\r
+ $(RM) $(OBJ)\r
+ $(RM) $(SRC:.c=.s)\r
+ $(RM) $(SRC:.c=.lst)\r
+ $(RM) $(TRG).map\r
+ $(RM) $(TRG).elf\r
+\r
+ $(RM) $(TRG).obj\r
+ $(RM) $(TRG).a90\r
+ $(RM) $(TRG).hex \r
+ $(RM) *.bak\r
+ $(RM) *.log\r
+ \r
+size:\r
+ $(SIZE) $(TRG).elf\r
+ \r
--- /dev/null
+/* hello.c by Nick for Hytech AVR */\r
+\r
+#include <stdio.h>\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <avr/signal.h>\r
+#include "hello.h"\r
+\r
+#define F_CPU 11059200 /* 4Mhz */\r
+#define UART_BAUD_RATE 9600 /* 9600 baud */\r
+#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)\r
+\r
+int uart_putc(char c)\r
+ {\r
+ while (bit_is_set(UCSRA, UDRE) == 0)\r
+ ;\r
+ UDR = c;\r
+ return 0;\r
+ }\r
+\r
+int uart_getc(void)\r
+ {\r
+ if (bit_is_set(UCSRA, RXC) == 0)\r
+ return -1;\r
+ return UDR;\r
+ }\r
+\r
+/* uart globals */\r
+static volatile unsigned char *uart_data_ptr;\r
+static volatile unsigned char uart_counter;\r
+\r
+\r
+SIGNAL(SIG_UART_TRANS)\r
+/* signal handler for uart txd ready interrupt */\r
+{\r
+#if 0\r
+ if (uart_counter == 0)\r
+ {\r
+ outp(inp(UCSRB) & ~(1<<UDRIE), UCSRB);\r
+ return;\r
+ }\r
+\r
+ uart_data_ptr++;\r
+\r
+ if (--uart_counter)\r
+ outp(*uart_data_ptr, UDR); /* write byte to data buffer */\r
+#endif\r
+}\r
+\r
+\r
+SIGNAL(SIG_UART_RECV)\r
+/* signal handler for receive complete interrupt */\r
+{\r
+ register char led;\r
+\r
+ led = inp(UDR); /* read byte for UART data buffer */\r
+#if 1\r
+ UDR = led + 1;\r
+#else\r
+ outp(~led, PORTB); /* output received byte to PortB (LEDs) */\r
+#endif\r
+}\r
+\r
+\r
+void uart_send(unsigned char *buf, unsigned char size)\r
+/* send buffer <buf> to uart */\r
+{\r
+ if (!uart_counter) {\r
+ /* write first byte to data buffer */\r
+ uart_data_ptr = buf;\r
+ uart_counter = size;\r
+ outp(*buf, UDR);\r
+ }\r
+}\r
+\r
+\r
+void uart_init(void)\r
+/* initialize uart */\r
+{\r
+ /* enable RxD/TxD and ints */\r
+ outp((1<<RXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN),UCSRB);\r
+ /* set baud rate */\r
+ outp((unsigned char)UART_BAUD_SELECT, UBRR);\r
+}\r
+\r
+int main(void)\r
+ {\r
+ /* initialise the AVR's built-in UART for 9600 bps */\r
+#if 1\r
+ uart_init();\r
+#else\r
+ UCSRA = _BV(TXC);\r
+ UCSRB = _BV(TXEN) | _BV(RXEN);\r
+ UBRR = 71;\r
+ /* UBRRH = 0; */ /* = (11059200 / (9600 * 16)) - 1 */\r
+#endif\r
+\r
+#if 0\r
+ /* send a demo message to ISPD via the AVR's UART */\r
+ uart_putc('h');\r
+ uart_putc('e');\r
+ uart_putc('l');\r
+ uart_putc('l');\r
+ uart_putc('o');\r
+#else\r
+ /* setup the standard input, output and error streams */\r
+ fdevopen(uart_putc, uart_getc, 0);\r
+\r
+ /* send a demo message to ISPD via the AVR's UART */\r
+ printf("hello, world\r\n");\r
+ uart_send("Serial Data from AVR received###", 32);\r
+#endif\r
+\r
+ /* enter an infinite loop as we can never exit */\r
+ while (1)\r
+ ;\r
+ }\r
+\r
--- /dev/null
+/*\r
+ Title: AVR-GCC test program #4 for the STK200 eva board\r
+ Author: Volker Oth\r
+ Date: 4/1999\r
+ Purpose: Uses the UART to communicate with a terminal program on the pc.\r
+ The "tranceive complete" interrupt is used to send the string \r
+ "Serial Data from AVR receiced###" continuously to the pc.\r
+ When a byte was received from the pc, the "receive complete"\r
+ interrupt is called, which outputs the byte to PortB where the\r
+ LEDs visualize the 8 bits it consists of.\r
+ UART format: 9600 baud, 8bit, 1 stopbit, no parity\r
+ needed\r
+ Software: AVR-GCC to compile\r
+ needed\r
+ Hardware: ATS90S8515/8535/2313/mega(?) on STK200/300 board\r
+ Note: To contact me, mail to\r
+ volkeroth@gmx.de\r
+ You might find more AVR related stuff at my homepage:\r
+ http://members.xoom.com/volkeroth\r
+*/\r
+\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <avr/signal.h>\r
+\r
+\r
+#define F_CPU 11059200 /* 4Mhz */\r
+#define UART_BAUD_RATE 9600 /* 9600 baud */\r
+\r
+\r
+#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)\r
+\r
+\r
+typedef unsigned char u08;\r
+typedef char s08;\r
+typedef unsigned short u16;\r
+typedef short s16;\r
+\r
+\r
+/* uart globals */\r
+static volatile u08 *uart_data_ptr;\r
+static volatile u08 uart_counter;\r
+\r
+\r
+SIGNAL(SIG_UART_TRANS) \r
+/* signal handler for uart txd ready interrupt */\r
+{\r
+ uart_data_ptr++;\r
+\r
+ if (--uart_counter)\r
+ outp(*uart_data_ptr, UDR); /* write byte to data buffer */\r
+}\r
+\r
+\r
+SIGNAL(SIG_UART_RECV) \r
+/* signal handler for receive complete interrupt */\r
+{\r
+ register char led;\r
+\r
+ led = inp(UDR); /* read byte for UART data buffer */\r
+#if 1\r
+ UDR = led + 1;\r
+#else\r
+ outp(~led, PORTB); /* output received byte to PortB (LEDs) */\r
+#endif\r
+}\r
+\r
+\r
+void uart_send(u08 *buf, u08 size)\r
+/* send buffer <buf> to uart */\r
+{ \r
+ if (!uart_counter) {\r
+ /* write first byte to data buffer */\r
+ uart_data_ptr = buf;\r
+ uart_counter = size;\r
+ outp(*buf, UDR);\r
+ }\r
+}\r
+\r
+\r
+void uart_init(void)\r
+/* initialize uart */\r
+{\r
+ /* enable RxD/TxD and ints */\r
+ outp((1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN),UCSRB); \r
+ /* set baud rate */\r
+ outp((u08)UART_BAUD_SELECT, UBRR); \r
+}\r
+\r
+\r
+int main(void)\r
+{\r
+ outp(0xff ,DDRB); /* PortB output */\r
+ outp(0x00, PORTB); /* switch LEDs on */\r
+\r
+ uart_init();\r
+ UDR = 'a';\r
+ abort();\r
+\r
+ sei(); /* enable interrupts */\r
+\r
+ for (;;) { /* loop forever */\r
+ uart_send("Serial Data from AVR received###", 32);\r
+ } \r
+}\r
--- /dev/null
+/* hello.c by Nick for Hytech AVR */
+
+#include <stdio.h>
+#include <avr/io.h>
+/* #include <avr/signal.h> */
+#include "hello.h"
+
+int my_puts(char *s)
+ {
+ char c;
+
+ while (c = *s++)
+ {
+ my_putc(c);
+ }
+ return 0;
+ }
+
+int my_putc(char c)
+ {
+ while (bit_is_set(UCSRA, UDRE) == 0)
+ ;
+ UDR = c;
+ return 0;
+ }
+
+int my_getc(void)
+ {
+ if (bit_is_set(UCSRA, RXC) == 0)
+ return -1;
+ return UDR;
+ }
+
+int main(void)
+ {
+ __do_copy_data();
+ __do_clear_bss();
+
+ /* initialise the AVR's built-in UART for 9600 bps */
+ UCSRA = _BV(TXC);
+ UCSRB = _BV(TXEN) | _BV(RXEN);
+ UBRR = 71;
+ /* UBRRH = 0; */ /* = (11059200 / (9600 * 16)) - 1 */
+
+#if 1
+ /* send a demo message to ISPD via the AVR's UART */
+ my_puts("a"); /* "hello, world\r\n"); */
+#else
+ /* setup the standard input, output and error streams */
+ fdevopen(my_putc, my_getc, 0);
+
+ /* send a demo message to ISPD via the AVR's UART */
+ printf("hello, world\r\n");
+#endif
+
+ /* enter an infinite loop as we can never exit */
+ while (1)
+ ;
+ }
+
--- /dev/null
+/* hello.c by Nick for Hytech AVR */\r
+\r
+#include <stdio.h>\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <avr/signal.h>\r
+#include "hello.h"\r
+\r
+#define F_CPU 11059200 /* 4Mhz */\r
+#define UART_BAUD_RATE 9600 /* 9600 baud */\r
+#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)\r
+\r
+int uart_putc(char c)\r
+ {\r
+ while (bit_is_set(UCSRA, UDRE) == 0)\r
+ ;\r
+ UDR = c;\r
+ return 0;\r
+ }\r
+\r
+int uart_getc(void)\r
+ {\r
+ if (bit_is_set(UCSRA, RXC) == 0)\r
+ return -1;\r
+ return UDR;\r
+ }\r
+\r
+/* uart globals */\r
+static volatile unsigned char *uart_data_ptr;\r
+static volatile unsigned char uart_counter;\r
+\r
+\r
+SIGNAL(SIG_UART_TRANS)\r
+/* signal handler for uart txd ready interrupt */\r
+{\r
+ if (uart_counter == 0)\r
+ {\r
+ outp(inp(UCSRB) & ~(1<<UDRIE), UCSRB);\r
+ return;\r
+ }\r
+\r
+ uart_data_ptr++;\r
+\r
+ if (--uart_counter)\r
+ outp(*uart_data_ptr, UDR); /* write byte to data buffer */\r
+}\r
+\r
+\r
+SIGNAL(SIG_UART_RECV)\r
+/* signal handler for receive complete interrupt */\r
+{\r
+ register char led;\r
+\r
+ led = inp(UDR); /* read byte for UART data buffer */\r
+#if 1\r
+ UDR = led + 1;\r
+#else\r
+ outp(~led, PORTB); /* output received byte to PortB (LEDs) */\r
+#endif\r
+}\r
+\r
+\r
+void uart_send(unsigned char *buf, unsigned char size)\r
+/* send buffer <buf> to uart */\r
+{\r
+ if (!uart_counter) {\r
+ /* write first byte to data buffer */\r
+ uart_data_ptr = buf;\r
+ uart_counter = size;\r
+ outp(*buf, UDR);\r
+ }\r
+}\r
+\r
+\r
+void uart_init(void)\r
+/* initialize uart */\r
+{\r
+ /* enable RxD/TxD and ints */\r
+ outp((1<<RXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN),UCSRB);\r
+ /* set baud rate */\r
+ outp((unsigned char)UART_BAUD_SELECT, UBRR);\r
+}\r
+\r
+int main(void)\r
+ {\r
+ /* initialise the AVR's built-in UART for 9600 bps */\r
+#if 1\r
+ uart_init();\r
+#else\r
+ UCSRA = _BV(TXC);\r
+ UCSRB = _BV(TXEN) | _BV(RXEN);\r
+ UBRR = 71;\r
+ /* UBRRH = 0; */ /* = (11059200 / (9600 * 16)) - 1 */\r
+#endif\r
+\r
+#if 0\r
+ /* send a demo message to ISPD via the AVR's UART */\r
+ uart_putc('h');\r
+ uart_putc('e');\r
+ uart_putc('l');\r
+ uart_putc('l');\r
+ uart_putc('o');\r
+#else\r
+ /* setup the standard input, output and error streams */\r
+ fdevopen(uart_putc, uart_getc, 0);\r
+\r
+ /* send a demo message to ISPD via the AVR's UART */\r
+ printf("hello, world\r\n");\r
+ uart_send("Serial Data from AVR received###", 32);\r
+#endif\r
+\r
+ /* enter an infinite loop as we can never exit */\r
+ while (1)\r
+ ;\r
+ }\r
+\r
--- /dev/null
+:00000001FF\r
--- /dev/null
+/* hello.h by Nick for Hytech AVR */
+
+int my_putc(char c);
+int my_getc(void);
+int main(void);
+
--- /dev/null
+/* hello.h by Nick for Hytech AVR */
+
+int my_puts(char *s);
+int my_putc(char c);
+int my_getc(void);
+int main(void);
+
--- /dev/null
+:100000000DC027C026C025C024C023C022C021C0E7\r
+:1000100074C01FC062C01DC01CC01BC011241FBE05\r
+:10002000CFEDD0E0DEBFCDBF10E0A0E6B0E0EAE16A\r
+:10003000FBE003C0C89531960D92A639B107D1F700\r
+:1000400010E0A6E9B0E001C01D92A33AB107E1F7C4\r
+:10005000A0C0D6CFCF93DF93CDB7DEB721970FB631\r
+:10006000F894DEBF0FBECDBF898380912B00992706\r
+:10007000807290700097C9F3898180932C0080E092\r
+:1000800090E021960FB6F894DEBF0FBECDBFDF9192\r
+:10009000CF910895CF93DF93CDB7DEB722970FB6F8\r
+:1000A000F894DEBF0FBECDBF80912B0088232CF0CB\r
+:1000B0008FEF9FEF89839A8305C080912C00992749\r
+:1000C00089839A8389819A8122960FB6F894DEBF3C\r
+:1000D0000FBECDBFDF91CF9108951F920F920FB643\r
+:1000E0000F921124CF93DF93CDB7DEB7DF91CF917D\r
+:1000F0000F900FBE0F901F9018951F920F920FB682\r
+:100100000F9211248F93CF93DF93CDB7DEB78091F9\r
+:100110002C008F5F80932C00DF91CF918F910F90F7\r
+:100120000FBE0F901F901895CF93DF93CDB7DEB71A\r
+:1001300023970FB6F894DEBF0FBECDBF89839A8395\r
+:100140006B8380919800882371F489819A819093C0\r
+:100150009700809396008B8180939800E981FA81C3\r
+:10016000808180932C0023960FB6F894DEBF0FBEDB\r
+:10017000CDBFDF91CF910895CF93DF93CDB7DEB799\r
+:1001800088EB80932A0087E480932900DF91CF9148\r
+:100190000895CFEDD0E0DEBFCDBFEEDF40E050E010\r
+:1001A0006AE470E08AE290E00CD080E690E09F93F1\r
+:1001B0008F934ED00F900F9060E28FE690E0B4DF07\r
+:1001C000FFCF0F931F93CF93DF93082F192FD72FB4\r
+:1001D000C62F009711F4672BB1F16BE070E081E05E\r
+:1001E00090E0D8D2F92FE82F009769F1209771F0AD\r
+:1001F000C187D28781E0828380919D0090919E008B\r
+:10020000892B21F4F0939E00E0939D0001151105C8\r
+:10021000C1F00783108782E0828380919F009091D4\r
+:10022000A000892B71F4F093A000E0939F008091CF\r
+:10023000A1009091A200892B21F4F093A200E093F9\r
+:10024000A1008E2F9F2FDF91CF911F910F910895C5\r
+:10025000A0E0B0E0EDE2F1E038C4E5E0F0E0EC0F62\r
+:10026000FD1F819191914E2F5F2F682F792F8091E3\r
+:100270009F009091A00002D0E2E043C4A2E1B0E070\r
+:10028000E3E4F1E012C4AA24BB24CC24DD24682ECC\r
+:10029000792E6D877E874F87588B44245524F92FFC\r
+:1002A000E82F45825682828181FD56C28FEF9FEFF3\r
+:1002B0006EC240FE3FC2822D80538A3020F5F0E3AB\r
+:1002C0002F1641F42A89222329F4332019F480E0DF\r
+:1002D00091E093C0EA898E2F9927282F392F220F7A\r
+:1002E000331F220F331F220F331F280F391F280FF0\r
+:1002F000822F820D80538A8B43FC2EC288230CF4FC\r
+:100300002BC2382E29C243FE05C0FA89FF2311F4FF\r
+:1003100021E02A8B822D992787FD909588369105BB\r
+:1003200054F5853691050CF06BC08835910509F4BC\r
+:10033000DDC089359105B4F48B32910509F442C0D2\r
+:100340008C32910544F48032910509F43FC08397C3\r
+:1003500009F442C0E5C18D329105D9F18E9709F4B7\r
+:1003600040C0DEC18336910509F454C0843691053E\r
+:1003700009F47DC0D5C18037910509F4AFC081373C\r
+:10038000910584F48C369105B1F18D3691052CF4EC\r
+:100390008936910509F46BC0C3C18F36910509F404\r
+:1003A0009AC0BEC18537910509F4A2C08637910570\r
+:1003B00024F483379105C1F1B3C18837910509F45D\r
+:1003C00095C0AEC180E190E0482A592AE0E2F0E011\r
+:1003D00005C080E890E011C0E0E4F0E04E2A5F2A1A\r
+:1003E000BBC188E090E0482A592AEFEFFEEF4E2289\r
+:1003F0005F221A8AB1C184E090E0482A592AACC130\r
+:100400000F2EFFE3AF2EF02D3A940F2EF3E62F2E92\r
+:10041000F02D28C1EF85F8898E2F9F2F02968F87A8\r
+:10042000988BA0803A941EC1EF85F8898E2F9F2F5C\r
+:1004300002968F87988BA080B180198AFB2DEA2DB8\r
+:100440008081882351F099899F5F998BFB2DEA2D3C\r
+:10045000E90FF11D80818823B1F743FE05C08A8929\r
+:100460009989891708F4898BE9893E1AFBC042FEF5\r
+:100470000CC0EF85F8898E2F9F2F04968F87988B5D\r
+:1004800020813181428153810FC0EF85F8898E2F01\r
+:100490009F2F02968F87988B80819181282F392FEB\r
+:1004A000442737FD4095542FA22EB32EC42ED52EAF\r
+:1004B000552364F4E2E0F0E04E2A5F2AD094C09421\r
+:1004C000B094A094A11CB11CC11CD11C8FEB9FEF58\r
+:1004D0004822592230C098E0998B0AC0E0E4F0E04D\r
+:1004E0004E2A5F2A0F2EF8E72F2EF02DF0E1F98B20\r
+:1004F00042FE0CC0EF85F8898E2F9F2F04968F87C0\r
+:10050000988B20813181428153810DC0EF85F8891C\r
+:100510008E2F9F2F02968F87988B80819181282F15\r
+:10052000392F44275527A22EB32EC42ED52EEFECFB\r
+:10053000FFEF4E225F228C2E9D2E0894811C911C71\r
+:10054000F989EF2EFF24002711279D2D8C2D7B2D5F\r
+:100550006A2D512F402F3F2D2E2D80D2B92FA82F3D\r
+:10056000972F862FF92DE82D80838A301CF0820D7D\r
+:10057000815204C0F92DE82D8081805DF92DE82D90\r
+:1005800081938E2E9F2E9D2D8C2D7B2D6A2D512F8C\r
+:10059000402F3F2D2E2D62D2A22EB32EC42ED52E4B\r
+:1005A000211531054105510581F650FE17C0A32CD8\r
+:1005B00046FE0BC0832D992787FD9095F989F03170\r
+:1005C00011F4825001C08150A82E45FCAA941A143F\r
+:1005D0002CF4AA8A88E090E0482A592A43FE1CC0DD\r
+:1005E0009A89993010F0E8E0EA8B8C2F9D2F0196C4\r
+:1005F000A82CA81A8A89F82FF150FA8BA81660F453\r
+:1006000090E3F92DE82D91938E2E9F2E8A89F82F55\r
+:10061000F150FA8BA816A8F341FE02C08DE207C084\r
+:1006200044FE02C08BE203C045FE06C080E2F92D05\r
+:10063000E82D81938E2E9F2E46FE0EC0F989F03153\r
+:1006400029F4F92DE82D21928E2E9F2E80E3F92D8D\r
+:10065000E82D81938E2E9F2E8C2F9D2F0196F82DA5\r
+:10066000F81B3F1A842D807869F4832D3A9418166C\r
+:100670004CF4772D662D80E290E0A4D0832D3A943F\r
+:100680001816BCF323E6221641F48A2D992787FD1C\r
+:100690009095772D662D96D032C083E72816B9F451\r
+:1006A00099899150998B9F3F51F1FB2DEA2D8081C3\r
+:1006B000992787FD90950894A11CB11C772D662D74\r
+:1006C00081D0E989E150E98BEF3F79F718C08C2F91\r
+:1006D0009D2F01968816990691F00C2F1D2F0F5F04\r
+:1006E0001F4FF92DE82D82918E2E9F2E992787FD81\r
+:1006F0009095772D662D66D08016910691F7842D02\r
+:100700008078A9F0832D3A9418168CF4772D662DF5\r
+:1007100080E290E057D0832D3A941816BCF307C0BE\r
+:10072000822D992787FD9095772D662D4BD04424F7\r
+:10073000552412C0F5E22F1641F444245524439465\r
+:100740001A8A3A882AE0298B07C0822D992787FDCB\r
+:100750009095772D662D36D0F72DE62D828183FF7B\r
+:100760000AC0ED85FE858E2F9F2F01968D879E876F\r
+:10077000C895202C05C0ED85FE852190ED87FE876C\r
+:10078000222009F096CDF72DE62D85819681E2E1B4\r
+:100790006296A7C10F931F93CF93DF934DD1082F7C\r
+:1007A000192F3DD0D92FC82F009739F0512F402F46\r
+:1007B00060E070E039D18C2F9D2FDF91CF911F9198\r
+:1007C0000F9108950F931F93CF93DF93082F192F45\r
+:1007D000D72FC62F8A8182FF0DC02D813E818B814C\r
+:1007E0009C812817390764F4E881F9810193E88333\r
+:1007F000F98306C0EF81F885802F0995892B41F494\r
+:100800008D819E8101968D839E83912F802F02C0C2\r
+:100810008FEF9FEFDF91CF911F910F910895482F98\r
+:10082000592F029710F442E050E020E030E0E091D0\r
+:100830009B00F0919C006E2F7F2FB32FA22F30973B\r
+:10084000B9F0808191818417950759F148175907AC\r
+:1008500040F42115310519F08217930710F4282F61\r
+:10086000392FAE2FBF2F0280F381E02D309749F74B\r
+:1008700021153105E9F1932F822F841B950B0497E5\r
+:1008800010F4532F422FF72FE62FA0E0B0E0672B94\r
+:1008900079F1808191818217930719F542175307E7\r
+:1008A00089F4228133818E2F9F2F0296109729F091\r
+:1008B00012962D933C931397089530939C002093A8\r
+:1008C0009B000895241B350BAE2FBF2FA20FB31F23\r
+:1008D0004D935D9322503040208331838A2F9B2F8C\r
+:1008E0000895AE2FBF2F0280F381E02D309789F657\r
+:1008F0008091990090919A00892B41F48091920007\r
+:100900009091930090939A0080939900A091940005\r
+:10091000B0919500109741F4ADB7BEB780919000AB\r
+:1009200090919100A81BB90BE0919900F0919A0069\r
+:100930008E2F9F2F840F951F02968A179B0748F4CE\r
+:1009400090939A0080939900419351938E2F9F2FFB\r
+:10095000089580E090E00895CF93DF93009709F425\r
+:1009600060C0B92FA82F129712961D921C92139750\r
+:1009700080919B0090919C00009751F1F92FE82FF6\r
+:1009800040E050E0EA17FB0740F1DB2FCA2F129638\r
+:10099000ED93FC9313972D913C911197C20FD31FA8\r
+:1009A0008C2F9D2F02968E179F0779F48A819B8149\r
+:1009B000280F391F2E5F3F4F2D933C931197828153\r
+:1009C000938112968D939C9313974115510561F471\r
+:1009D000B0939C00A0939B0024C04E2F5F2F0280F9\r
+:1009E000F381E02D309771F6D52FC42FAA83BB83F6\r
+:1009F000952F842F029628813981820F931F8A17A1\r
+:100A00009B0779F48D919C911197280F391F2E5FC8\r
+:100A10003F4F2883398312968D919C9113978A8337\r
+:100A20009B83DF91CF910895A82FB92F01C06D93BB\r
+:100A300041505040E0F708955527002480FF02C040\r
+:100A4000060E571F660F771F6115710521F09695E9\r
+:100A50008795009799F7952F802D0895A1E21A2E7A\r
+:100A6000AA1BBB1BEA2FFB2F0DC0AA1FBB1FEE1F2B\r
+:100A7000FF1FA217B307E407F50720F0A21BB30B73\r
+:100A8000E40BF50B661F771F881F991F1A9469F7EF\r
+:100A90006095709580959095262F372F482F592F68\r
+:100AA0006A2F7B2F8E2F9F2F08952F923F924F9268\r
+:100AB0005F926F927F928F929F92AF92BF92CF92EE\r
+:100AC000DF92EF92FF920F931F93CF93DF93CDB7F7\r
+:100AD000DEB7CA1BDB0B0FB6F894DEBF0FBECDBF6F\r
+:100AE00009942A88398848885F846E847D848C8440\r
+:100AF0009B84AA84B984C884DF80EE80FD800C8149\r
+:100B00001B81AA81B981CE0FD11D0FB6F894DEBF2B\r
+:0A0B10000FBECDBFCA2FDB2F0895E2\r
+:100B1A0068656C6C6F2C20776F726C640D0A0053D9\r
+:100B2A00657269616C20446174612066726F6D2020\r
+:100B3A0041565220726563656976656423232300F2\r
+:060B4A002000A3000000E2\r
+:00000001FF\r
--- /dev/null
+GAS LISTING C:\cygwin\tmp/cciqaaaa.s page 1\r
+\r
+\r
+ 1 .file "hello.c"\r
+ 2 .arch at90s4433\r
+ 3 __SREG__ = 0x3f\r
+ 4 __SP_H__ = 0x3e\r
+ 5 __SP_L__ = 0x3d\r
+ 6 __tmp_reg__ = 0\r
+ 7 __zero_reg__ = 1\r
+ 8 .global __do_copy_data\r
+ 9 .global __do_clear_bss\r
+ 10 .stabs "c:\\uzi\\src\\avrsample/",100,0,0,.Ltext0\r
+ 11 .stabs "hello.c",100,0,0,.Ltext0\r
+ 12 .text\r
+ 13 .Ltext0:\r
+ 14 .stabs "gcc2_compiled.",60,0,0,0\r
+ 15 .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0\r
+ 16 .stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0\r
+ 17 .stabs "long int:t(0,3)=@s32;r(0,3);0020000000000;0017777777777;",128,0,0,0\r
+ 18 .stabs "unsigned int:t(0,4)=r(0,4);0000000000000;0000000177777;",128,0,0,0\r
+ 19 .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0000000000000;0037777777777;",128,0,0,0\r
+ 20 .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,\r
+ 21 .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;",128,0,0,\r
+ 22 .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0\r
+ 23 .stabs "short unsigned int:t(0,9)=r(0,9);0000000000000;0000000177777;",128,0,0,0\r
+ 24 .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0\r
+ 25 .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0\r
+ 26 .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0\r
+ 27 .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0\r
+ 28 .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0\r
+ 29 .stabs "complex int:t(0,15)=s4real:(0,1),0,16;imag:(0,1),16,16;;",128,0,0,0\r
+ 30 .stabs "complex float:t(0,16)=r(0,16);8;0;",128,0,0,0\r
+ 31 .stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0\r
+ 32 .stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0\r
+ 33 .stabs "__builtin_va_list:t(0,19)=*(0,20)=(0,20)",128,0,0,0\r
+ 34 .stabs "_Bool:t(0,21)=@s8;-16;",128,0,0,0\r
+ 35 .stabs "hello.c",130,0,0,0\r
+ 36 .stabs "c:/WinAVR/avr/include/stdio.h",130,0,0,0\r
+ 37 .stabs "c:/WinAVR/avr/include/inttypes.h",130,0,0,0\r
+ 38 .stabs "int8_t:t(3,1)=(0,10)",128,0,46,0\r
+ 39 .stabs "uint8_t:t(3,2)=(0,11)",128,0,47,0\r
+ 40 .stabs "int16_t:t(3,3)=(0,1)",128,0,49,0\r
+ 41 .stabs "uint16_t:t(3,4)=(0,4)",128,0,50,0\r
+ 42 .stabs "int32_t:t(3,5)=(0,3)",128,0,52,0\r
+ 43 .stabs "uint32_t:t(3,6)=(0,5)",128,0,53,0\r
+ 44 .stabs "int64_t:t(3,7)=(0,6)",128,0,55,0\r
+ 45 .stabs "uint64_t:t(3,8)=(0,7)",128,0,56,0\r
+ 46 .stabs "intptr_t:t(3,9)=(3,3)",128,0,58,0\r
+ 47 .stabs "uintptr_t:t(3,10)=(3,4)",128,0,59,0\r
+ 48 .stabn 162,0,0,0\r
+ 49 .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stdarg.h",130,0,0,0\r
+ 50 .stabs "__gnuc_va_list:t(4,1)=(0,19)",128,0,43,0\r
+ 51 .stabs "va_list:t(4,2)=(4,1)",128,0,105,0\r
+ 52 .stabn 162,0,0,0\r
+ 53 .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stddef.h",130,0,0,0\r
+ 54 .stabs "size_t:t(5,1)=(0,4)",128,0,213,0\r
+ 55 .stabn 162,0,0,0\r
+ 56 .stabn 162,0,0,0\r
+ 57 .stabs "c:/WinAVR/avr/include/avr/io.h",130,0,0,0\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 2\r
+\r
+\r
+ 58 .stabs "c:/WinAVR/avr/include/avr/io4433.h",130,0,0,0\r
+ 59 .stabs "c:/WinAVR/avr/include/avr/sfr_defs.h",130,0,0,0\r
+ 60 .stabn 162,0,0,0\r
+ 61 .stabn 162,0,0,0\r
+ 62 .stabn 162,0,0,0\r
+ 63 .stabs "c:/WinAVR/avr/include/avr/interrupt.h",130,0,0,0\r
+ 64 .stabn 162,0,0,0\r
+ 65 .stabs "c:/WinAVR/avr/include/avr/signal.h",130,0,0,0\r
+ 66 .stabn 162,0,0,0\r
+ 67 .stabs "hello.h",130,0,0,0\r
+ 68 .stabn 162,0,0,0\r
+ 69 .stabs "uart_putc:F(0,1)",36,0,14,uart_putc\r
+ 70 .stabs "c:p(0,2)",160,0,13,1\r
+ 71 .global uart_putc\r
+ 72 .type uart_putc, @function\r
+ 73 uart_putc:\r
+ 1:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 2:hello.c **** \r
+ 3:hello.c **** #include <stdio.h>\r
+ 4:hello.c **** #include <avr/io.h>\r
+ 5:hello.c **** #include <avr/interrupt.h>\r
+ 6:hello.c **** #include <avr/signal.h>\r
+ 7:hello.c **** #include "hello.h"\r
+ 8:hello.c **** \r
+ 9:hello.c **** #define F_CPU 11059200 /* 4Mhz */\r
+ 10:hello.c **** #define UART_BAUD_RATE 9600 /* 9600 baud */\r
+ 11:hello.c **** #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)\r
+ 12:hello.c **** \r
+ 13:hello.c **** int uart_putc(char c)\r
+ 14:hello.c **** {\r
+ 74 .stabn 68,0,14,.LM1-uart_putc\r
+ 75 .LM1:\r
+ 76 /* prologue: frame size=1 */\r
+ 77 0000 CF93 push r28\r
+ 78 0002 DF93 push r29\r
+ 79 0004 CDB7 in r28,__SP_L__\r
+ 80 0006 DEB7 in r29,__SP_H__\r
+ 81 0008 2197 sbiw r28,1\r
+ 82 000a 0FB6 in __tmp_reg__,__SREG__\r
+ 83 000c F894 cli\r
+ 84 000e DEBF out __SP_H__,r29\r
+ 85 0010 0FBE out __SREG__,__tmp_reg__\r
+ 86 0012 CDBF out __SP_L__,r28\r
+ 87 /* prologue end (size=10) */\r
+ 88 0014 8983 std Y+1,r24\r
+ 15:hello.c **** while (bit_is_set(UCSRA, UDRE) == 0)\r
+ 89 .stabn 68,0,15,.LM2-uart_putc\r
+ 90 .LM2:\r
+ 91 .L4:\r
+ 92 0016 8091 2B00 lds r24,43\r
+ 93 001a 9927 clr r25\r
+ 94 001c 8072 andi r24,lo8(32)\r
+ 95 001e 9070 andi r25,hi8(32)\r
+ 96 0020 0097 sbiw r24,0\r
+ 97 0022 C9F3 breq .L4\r
+ 16:hello.c **** ;\r
+ 17:hello.c **** UDR = c;\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 3\r
+\r
+\r
+ 98 .stabn 68,0,17,.LM3-uart_putc\r
+ 99 .LM3:\r
+ 100 0024 8981 ldd r24,Y+1\r
+ 101 0026 8093 2C00 sts 44,r24\r
+ 18:hello.c **** return 0;\r
+ 102 .stabn 68,0,18,.LM4-uart_putc\r
+ 103 .LM4:\r
+ 104 002a 80E0 ldi r24,lo8(0)\r
+ 105 002c 90E0 ldi r25,hi8(0)\r
+ 19:hello.c **** }\r
+ 106 .stabn 68,0,19,.LM5-uart_putc\r
+ 107 .LM5:\r
+ 108 /* epilogue: frame size=1 */\r
+ 109 002e 2196 adiw r28,1\r
+ 110 0030 0FB6 in __tmp_reg__,__SREG__\r
+ 111 0032 F894 cli\r
+ 112 0034 DEBF out __SP_H__,r29\r
+ 113 0036 0FBE out __SREG__,__tmp_reg__\r
+ 114 0038 CDBF out __SP_L__,r28\r
+ 115 003a DF91 pop r29\r
+ 116 003c CF91 pop r28\r
+ 117 003e 0895 ret\r
+ 118 /* epilogue end (size=9) */\r
+ 119 /* function uart_putc size 32 (13) */\r
+ 120 .size uart_putc, .-uart_putc\r
+ 121 .Lscope0:\r
+ 122 .stabs "",36,0,0,.Lscope0-uart_putc\r
+ 123 .stabs "uart_getc:F(0,1)",36,0,22,uart_getc\r
+ 124 .global uart_getc\r
+ 125 .type uart_getc, @function\r
+ 126 uart_getc:\r
+ 20:hello.c **** \r
+ 21:hello.c **** int uart_getc(void)\r
+ 22:hello.c **** {\r
+ 127 .stabn 68,0,22,.LM6-uart_getc\r
+ 128 .LM6:\r
+ 129 /* prologue: frame size=2 */\r
+ 130 0040 CF93 push r28\r
+ 131 0042 DF93 push r29\r
+ 132 0044 CDB7 in r28,__SP_L__\r
+ 133 0046 DEB7 in r29,__SP_H__\r
+ 134 0048 2297 sbiw r28,2\r
+ 135 004a 0FB6 in __tmp_reg__,__SREG__\r
+ 136 004c F894 cli\r
+ 137 004e DEBF out __SP_H__,r29\r
+ 138 0050 0FBE out __SREG__,__tmp_reg__\r
+ 139 0052 CDBF out __SP_L__,r28\r
+ 140 /* prologue end (size=10) */\r
+ 23:hello.c **** if (bit_is_set(UCSRA, RXC) == 0)\r
+ 141 .stabn 68,0,23,.LM7-uart_getc\r
+ 142 .LM7:\r
+ 143 0054 8091 2B00 lds r24,43\r
+ 144 0058 8823 tst r24\r
+ 145 005a 2CF0 brlt .L8\r
+ 24:hello.c **** return -1;\r
+ 146 .stabn 68,0,24,.LM8-uart_getc\r
+ 147 .LM8:\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 4\r
+\r
+\r
+ 148 005c 8FEF ldi r24,lo8(-1)\r
+ 149 005e 9FEF ldi r25,hi8(-1)\r
+ 150 0060 8983 std Y+1,r24\r
+ 151 0062 9A83 std Y+2,r25\r
+ 152 0064 05C0 rjmp .L7\r
+ 153 .L8:\r
+ 25:hello.c **** return UDR;\r
+ 154 .stabn 68,0,25,.LM9-uart_getc\r
+ 155 .LM9:\r
+ 156 0066 8091 2C00 lds r24,44\r
+ 157 006a 9927 clr r25\r
+ 158 006c 8983 std Y+1,r24\r
+ 159 006e 9A83 std Y+2,r25\r
+ 26:hello.c **** }\r
+ 160 .stabn 68,0,26,.LM10-uart_getc\r
+ 161 .LM10:\r
+ 162 .L7:\r
+ 163 0070 8981 ldd r24,Y+1\r
+ 164 0072 9A81 ldd r25,Y+2\r
+ 165 /* epilogue: frame size=2 */\r
+ 166 0074 2296 adiw r28,2\r
+ 167 0076 0FB6 in __tmp_reg__,__SREG__\r
+ 168 0078 F894 cli\r
+ 169 007a DEBF out __SP_H__,r29\r
+ 170 007c 0FBE out __SREG__,__tmp_reg__\r
+ 171 007e CDBF out __SP_L__,r28\r
+ 172 0080 DF91 pop r29\r
+ 173 0082 CF91 pop r28\r
+ 174 0084 0895 ret\r
+ 175 /* epilogue end (size=9) */\r
+ 176 /* function uart_getc size 35 (16) */\r
+ 177 .size uart_getc, .-uart_getc\r
+ 178 .Lscope1:\r
+ 179 .stabs "",36,0,0,.Lscope1-uart_getc\r
+ 180 .stabs "__vector_10:F(0,20)",36,0,35,__vector_10\r
+ 181 .global __vector_10\r
+ 182 .type __vector_10, @function\r
+ 183 __vector_10:\r
+ 27:hello.c **** \r
+ 28:hello.c **** /* uart globals */\r
+ 29:hello.c **** static volatile unsigned char *uart_data_ptr;\r
+ 30:hello.c **** static volatile unsigned char uart_counter;\r
+ 31:hello.c **** \r
+ 32:hello.c **** \r
+ 33:hello.c **** SIGNAL(SIG_UART_TRANS)\r
+ 34:hello.c **** /* signal handler for uart txd ready interrupt */\r
+ 35:hello.c **** {\r
+ 184 .stabn 68,0,35,.LM11-__vector_10\r
+ 185 .LM11:\r
+ 186 /* prologue: frame size=0 */\r
+ 187 0086 1F92 push __zero_reg__\r
+ 188 0088 0F92 push __tmp_reg__\r
+ 189 008a 0FB6 in __tmp_reg__,__SREG__\r
+ 190 008c 0F92 push __tmp_reg__\r
+ 191 008e 1124 clr __zero_reg__\r
+ 192 0090 CF93 push r28\r
+ 193 0092 DF93 push r29\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 5\r
+\r
+\r
+ 194 0094 CDB7 in r28,__SP_L__\r
+ 195 0096 DEB7 in r29,__SP_H__\r
+ 196 /* prologue end (size=9) */\r
+ 36:hello.c **** #if 0\r
+ 37:hello.c **** if (uart_counter == 0)\r
+ 38:hello.c **** {\r
+ 39:hello.c **** outp(inp(UCSRB) & ~(1<<UDRIE), UCSRB);\r
+ 40:hello.c **** return;\r
+ 41:hello.c **** }\r
+ 42:hello.c **** \r
+ 43:hello.c **** uart_data_ptr++;\r
+ 44:hello.c **** \r
+ 45:hello.c **** if (--uart_counter)\r
+ 46:hello.c **** outp(*uart_data_ptr, UDR); /* write byte to data buffer */\r
+ 47:hello.c **** #endif\r
+ 48:hello.c **** }\r
+ 197 .stabn 68,0,48,.LM12-__vector_10\r
+ 198 .LM12:\r
+ 199 /* epilogue: frame size=0 */\r
+ 200 0098 DF91 pop r29\r
+ 201 009a CF91 pop r28\r
+ 202 009c 0F90 pop __tmp_reg__\r
+ 203 009e 0FBE out __SREG__,__tmp_reg__\r
+ 204 00a0 0F90 pop __tmp_reg__\r
+ 205 00a2 1F90 pop __zero_reg__\r
+ 206 00a4 1895 reti\r
+ 207 /* epilogue end (size=7) */\r
+ 208 /* function __vector_10 size 16 (0) */\r
+ 209 .size __vector_10, .-__vector_10\r
+ 210 .Lscope2:\r
+ 211 .stabs "",36,0,0,.Lscope2-__vector_10\r
+ 212 .stabs "__vector_8:F(0,20)",36,0,53,__vector_8\r
+ 213 .global __vector_8\r
+ 214 .type __vector_8, @function\r
+ 215 __vector_8:\r
+ 49:hello.c **** \r
+ 50:hello.c **** \r
+ 51:hello.c **** SIGNAL(SIG_UART_RECV)\r
+ 52:hello.c **** /* signal handler for receive complete interrupt */\r
+ 53:hello.c **** {\r
+ 216 .stabn 68,0,53,.LM13-__vector_8\r
+ 217 .LM13:\r
+ 218 /* prologue: frame size=0 */\r
+ 219 00a6 1F92 push __zero_reg__\r
+ 220 00a8 0F92 push __tmp_reg__\r
+ 221 00aa 0FB6 in __tmp_reg__,__SREG__\r
+ 222 00ac 0F92 push __tmp_reg__\r
+ 223 00ae 1124 clr __zero_reg__\r
+ 224 00b0 8F93 push r24\r
+ 225 00b2 CF93 push r28\r
+ 226 00b4 DF93 push r29\r
+ 227 00b6 CDB7 in r28,__SP_L__\r
+ 228 00b8 DEB7 in r29,__SP_H__\r
+ 229 /* prologue end (size=10) */\r
+ 54:hello.c **** register char led;\r
+ 55:hello.c **** \r
+ 56:hello.c **** led = inp(UDR); /* read byte for UART data buffer */\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 6\r
+\r
+\r
+ 230 .stabn 68,0,56,.LM14-__vector_8\r
+ 231 .LM14:\r
+ 232 .LBB2:\r
+ 233 00ba 8091 2C00 lds r24,44\r
+ 57:hello.c **** #if 1\r
+ 58:hello.c **** UDR = led + 1;\r
+ 234 .stabn 68,0,58,.LM15-__vector_8\r
+ 235 .LM15:\r
+ 236 00be 8F5F subi r24,lo8(-(1))\r
+ 237 00c0 8093 2C00 sts 44,r24\r
+ 59:hello.c **** #else\r
+ 60:hello.c **** outp(~led, PORTB); /* output received byte to PortB (LEDs) */\r
+ 61:hello.c **** #endif\r
+ 62:hello.c **** }\r
+ 238 .stabn 68,0,62,.LM16-__vector_8\r
+ 239 .LM16:\r
+ 240 .LBE2:\r
+ 241 /* epilogue: frame size=0 */\r
+ 242 00c4 DF91 pop r29\r
+ 243 00c6 CF91 pop r28\r
+ 244 00c8 8F91 pop r24\r
+ 245 00ca 0F90 pop __tmp_reg__\r
+ 246 00cc 0FBE out __SREG__,__tmp_reg__\r
+ 247 00ce 0F90 pop __tmp_reg__\r
+ 248 00d0 1F90 pop __zero_reg__\r
+ 249 00d2 1895 reti\r
+ 250 /* epilogue end (size=8) */\r
+ 251 /* function __vector_8 size 23 (5) */\r
+ 252 .size __vector_8, .-__vector_8\r
+ 253 .stabs "led:r(0,2)",64,0,54,24\r
+ 254 .stabn 192,0,0,.LBB2-__vector_8\r
+ 255 .stabn 224,0,0,.LBE2-__vector_8\r
+ 256 .Lscope3:\r
+ 257 .stabs "",36,0,0,.Lscope3-__vector_8\r
+ 258 .stabs "uart_send:F(0,20)",36,0,67,uart_send\r
+ 259 .stabs "buf:p(1,1)=*(0,11)",160,0,65,1\r
+ 260 .stabs "size:p(0,11)",160,0,65,3\r
+ 261 .global uart_send\r
+ 262 .type uart_send, @function\r
+ 263 uart_send:\r
+ 63:hello.c **** \r
+ 64:hello.c **** \r
+ 65:hello.c **** void uart_send(unsigned char *buf, unsigned char size)\r
+ 66:hello.c **** /* send buffer <buf> to uart */\r
+ 67:hello.c **** {\r
+ 264 .stabn 68,0,67,.LM17-uart_send\r
+ 265 .LM17:\r
+ 266 /* prologue: frame size=3 */\r
+ 267 00d4 CF93 push r28\r
+ 268 00d6 DF93 push r29\r
+ 269 00d8 CDB7 in r28,__SP_L__\r
+ 270 00da DEB7 in r29,__SP_H__\r
+ 271 00dc 2397 sbiw r28,3\r
+ 272 00de 0FB6 in __tmp_reg__,__SREG__\r
+ 273 00e0 F894 cli\r
+ 274 00e2 DEBF out __SP_H__,r29\r
+ 275 00e4 0FBE out __SREG__,__tmp_reg__\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 7\r
+\r
+\r
+ 276 00e6 CDBF out __SP_L__,r28\r
+ 277 /* prologue end (size=10) */\r
+ 278 00e8 8983 std Y+1,r24\r
+ 279 00ea 9A83 std Y+2,r25\r
+ 280 00ec 6B83 std Y+3,r22\r
+ 68:hello.c **** if (!uart_counter) {\r
+ 281 .stabn 68,0,68,.LM18-uart_send\r
+ 282 .LM18:\r
+ 283 00ee 8091 0000 lds r24,uart_counter\r
+ 284 00f2 8823 tst r24\r
+ 285 00f4 71F4 brne .L11\r
+ 69:hello.c **** /* write first byte to data buffer */\r
+ 70:hello.c **** uart_data_ptr = buf;\r
+ 286 .stabn 68,0,70,.LM19-uart_send\r
+ 287 .LM19:\r
+ 288 00f6 8981 ldd r24,Y+1\r
+ 289 00f8 9A81 ldd r25,Y+2\r
+ 290 00fa 9093 0000 sts (uart_data_ptr)+1,r25\r
+ 291 00fe 8093 0000 sts uart_data_ptr,r24\r
+ 71:hello.c **** uart_counter = size;\r
+ 292 .stabn 68,0,71,.LM20-uart_send\r
+ 293 .LM20:\r
+ 294 0102 8B81 ldd r24,Y+3\r
+ 295 0104 8093 0000 sts uart_counter,r24\r
+ 72:hello.c **** outp(*buf, UDR);\r
+ 296 .stabn 68,0,72,.LM21-uart_send\r
+ 297 .LM21:\r
+ 298 0108 E981 ldd r30,Y+1\r
+ 299 010a FA81 ldd r31,Y+2\r
+ 300 010c 8081 ld r24,Z\r
+ 301 010e 8093 2C00 sts 44,r24\r
+ 73:hello.c **** }\r
+ 74:hello.c **** }\r
+ 302 .stabn 68,0,74,.LM22-uart_send\r
+ 303 .LM22:\r
+ 304 .L11:\r
+ 305 /* epilogue: frame size=3 */\r
+ 306 0112 2396 adiw r28,3\r
+ 307 0114 0FB6 in __tmp_reg__,__SREG__\r
+ 308 0116 F894 cli\r
+ 309 0118 DEBF out __SP_H__,r29\r
+ 310 011a 0FBE out __SREG__,__tmp_reg__\r
+ 311 011c CDBF out __SP_L__,r28\r
+ 312 011e DF91 pop r29\r
+ 313 0120 CF91 pop r28\r
+ 314 0122 0895 ret\r
+ 315 /* epilogue end (size=9) */\r
+ 316 /* function uart_send size 40 (21) */\r
+ 317 .size uart_send, .-uart_send\r
+ 318 .Lscope4:\r
+ 319 .stabs "",36,0,0,.Lscope4-uart_send\r
+ 320 .stabs "uart_init:F(0,20)",36,0,79,uart_init\r
+ 321 .global uart_init\r
+ 322 .type uart_init, @function\r
+ 323 uart_init:\r
+ 75:hello.c **** \r
+ 76:hello.c **** \r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 8\r
+\r
+\r
+ 77:hello.c **** void uart_init(void)\r
+ 78:hello.c **** /* initialize uart */\r
+ 79:hello.c **** {\r
+ 324 .stabn 68,0,79,.LM23-uart_init\r
+ 325 .LM23:\r
+ 326 /* prologue: frame size=0 */\r
+ 327 0124 CF93 push r28\r
+ 328 0126 DF93 push r29\r
+ 329 0128 CDB7 in r28,__SP_L__\r
+ 330 012a DEB7 in r29,__SP_H__\r
+ 331 /* prologue end (size=4) */\r
+ 80:hello.c **** /* enable RxD/TxD and ints */\r
+ 81:hello.c **** outp((1<<RXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN),UCSRB);\r
+ 332 .stabn 68,0,81,.LM24-uart_init\r
+ 333 .LM24:\r
+ 334 012c 88EB ldi r24,lo8(-72)\r
+ 335 012e 8093 2A00 sts 42,r24\r
+ 82:hello.c **** /* set baud rate */\r
+ 83:hello.c **** outp((unsigned char)UART_BAUD_SELECT, UBRR);\r
+ 336 .stabn 68,0,83,.LM25-uart_init\r
+ 337 .LM25:\r
+ 338 0132 87E4 ldi r24,lo8(71)\r
+ 339 0134 8093 2900 sts 41,r24\r
+ 84:hello.c **** }\r
+ 340 .stabn 68,0,84,.LM26-uart_init\r
+ 341 .LM26:\r
+ 342 /* epilogue: frame size=0 */\r
+ 343 0138 DF91 pop r29\r
+ 344 013a CF91 pop r28\r
+ 345 013c 0895 ret\r
+ 346 /* epilogue end (size=3) */\r
+ 347 /* function uart_init size 13 (6) */\r
+ 348 .size uart_init, .-uart_init\r
+ 349 .Lscope5:\r
+ 350 .stabs "",36,0,0,.Lscope5-uart_init\r
+ 351 .data\r
+ 352 .LC0:\r
+ 353 0000 6865 6C6C .string "hello, world\r\n"\r
+ 353 6F2C 2077 \r
+ 353 6F72 6C64 \r
+ 353 0D0A 00\r
+ 354 .LC1:\r
+ 355 000f 5365 7269 .string "Serial Data from AVR received###"\r
+ 355 616C 2044 \r
+ 355 6174 6120 \r
+ 355 6672 6F6D \r
+ 355 2041 5652 \r
+ 356 .text\r
+ 357 .stabs "main:F(0,1)",36,0,87,main\r
+ 358 .global main\r
+ 359 .type main, @function\r
+ 360 main:\r
+ 85:hello.c **** \r
+ 86:hello.c **** int main(void)\r
+ 87:hello.c **** {\r
+ 361 .stabn 68,0,87,.LM27-main\r
+ 362 .LM27:\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 9\r
+\r
+\r
+ 363 /* prologue: frame size=0 */\r
+ 364 013e C0E0 ldi r28,lo8(__stack - 0)\r
+ 365 0140 D0E0 ldi r29,hi8(__stack - 0)\r
+ 366 0142 DEBF out __SP_H__,r29\r
+ 367 0144 CDBF out __SP_L__,r28\r
+ 368 /* prologue end (size=4) */\r
+ 88:hello.c **** /* initialise the AVR's built-in UART for 9600 bps */\r
+ 89:hello.c **** #if 1\r
+ 90:hello.c **** uart_init();\r
+ 369 .stabn 68,0,90,.LM28-main\r
+ 370 .LM28:\r
+ 371 0146 EEDF rcall uart_init\r
+ 91:hello.c **** #else\r
+ 92:hello.c **** UCSRA = _BV(TXC);\r
+ 93:hello.c **** UCSRB = _BV(TXEN) | _BV(RXEN);\r
+ 94:hello.c **** UBRR = 71;\r
+ 95:hello.c **** /* UBRRH = 0; */ /* = (11059200 / (9600 * 16)) - 1 */\r
+ 96:hello.c **** #endif\r
+ 97:hello.c **** \r
+ 98:hello.c **** #if 0\r
+ 99:hello.c **** /* send a demo message to ISPD via the AVR's UART */\r
+ 100:hello.c **** uart_putc('h');\r
+ 101:hello.c **** uart_putc('e');\r
+ 102:hello.c **** uart_putc('l');\r
+ 103:hello.c **** uart_putc('l');\r
+ 104:hello.c **** uart_putc('o');\r
+ 105:hello.c **** #else\r
+ 106:hello.c **** /* setup the standard input, output and error streams */\r
+ 107:hello.c **** fdevopen(uart_putc, uart_getc, 0);\r
+ 372 .stabn 68,0,107,.LM29-main\r
+ 373 .LM29:\r
+ 374 0148 40E0 ldi r20,lo8(0)\r
+ 375 014a 50E0 ldi r21,hi8(0)\r
+ 376 014c 60E0 ldi r22,lo8(pm(uart_getc))\r
+ 377 014e 70E0 ldi r23,hi8(pm(uart_getc))\r
+ 378 0150 80E0 ldi r24,lo8(pm(uart_putc))\r
+ 379 0152 90E0 ldi r25,hi8(pm(uart_putc))\r
+ 380 0154 00D0 rcall fdevopen\r
+ 108:hello.c **** \r
+ 109:hello.c **** /* send a demo message to ISPD via the AVR's UART */\r
+ 110:hello.c **** printf("hello, world\r\n");\r
+ 381 .stabn 68,0,110,.LM30-main\r
+ 382 .LM30:\r
+ 383 0156 80E0 ldi r24,lo8(.LC0)\r
+ 384 0158 90E0 ldi r25,hi8(.LC0)\r
+ 385 015a 9F93 push r25\r
+ 386 015c 8F93 push r24\r
+ 387 015e 00D0 rcall printf\r
+ 388 0160 0F90 pop __tmp_reg__\r
+ 389 0162 0F90 pop __tmp_reg__\r
+ 111:hello.c **** uart_send("Serial Data from AVR received###", 32);\r
+ 390 .stabn 68,0,111,.LM31-main\r
+ 391 .LM31:\r
+ 392 0164 60E2 ldi r22,lo8(32)\r
+ 393 0166 80E0 ldi r24,lo8(.LC1)\r
+ 394 0168 90E0 ldi r25,hi8(.LC1)\r
+ 395 016a B4DF rcall uart_send\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 10\r
+\r
+\r
+ 112:hello.c **** #endif\r
+ 113:hello.c **** \r
+ 114:hello.c **** /* enter an infinite loop as we can never exit */\r
+ 115:hello.c **** while (1)\r
+ 396 .stabn 68,0,115,.LM32-main\r
+ 397 .LM32:\r
+ 398 .L15:\r
+ 399 016c FFCF rjmp .L15\r
+ 116:hello.c **** ;\r
+ 117:hello.c **** }\r
+ 400 .stabn 68,0,117,.LM33-main\r
+ 401 .LM33:\r
+ 402 /* epilogue: frame size=0 */\r
+ 403 /* epilogue: noreturn */\r
+ 404 /* epilogue end (size=0) */\r
+ 405 /* function main size 24 (20) */\r
+ 406 .size main, .-main\r
+ 407 .Lscope6:\r
+ 408 .stabs "",36,0,0,.Lscope6-main\r
+ 409 .lcomm uart_data_ptr,2\r
+ 410 .lcomm uart_counter,1\r
+ 411 .stabs "uart_data_ptr:S(1,2)=*(1,3)=B(0,11)",40,0,29,uart_data_ptr\r
+ 412 .stabs "uart_counter:S(1,3)",40,0,30,uart_counter\r
+ 413 .text\r
+ 414 .stabs "",100,0,0,Letext\r
+ 415 Letext:\r
+ 416 /* File "hello.c": code 183 = 0x00b7 ( 81), prologues 57, epilogues 45 */\r
+\fGAS LISTING C:\cygwin\tmp/cciqaaaa.s page 11\r
+\r
+\r
+DEFINED SYMBOLS\r
+ *ABS*:00000000 hello.c\r
+ *ABS*:0000003f __SREG__\r
+ *ABS*:0000003e __SP_H__\r
+ *ABS*:0000003d __SP_L__\r
+ *ABS*:00000000 __tmp_reg__\r
+ *ABS*:00000001 __zero_reg__\r
+C:\cygwin\tmp/cciqaaaa.s:73 .text:00000000 uart_putc\r
+C:\cygwin\tmp/cciqaaaa.s:126 .text:00000040 uart_getc\r
+C:\cygwin\tmp/cciqaaaa.s:183 .text:00000086 __vector_10\r
+C:\cygwin\tmp/cciqaaaa.s:215 .text:000000a6 __vector_8\r
+C:\cygwin\tmp/cciqaaaa.s:263 .text:000000d4 uart_send\r
+C:\cygwin\tmp/cciqaaaa.s:409 .bss:00000002 uart_counter\r
+ .bss:00000000 uart_data_ptr\r
+C:\cygwin\tmp/cciqaaaa.s:323 .text:00000124 uart_init\r
+C:\cygwin\tmp/cciqaaaa.s:360 .text:0000013e main\r
+C:\cygwin\tmp/cciqaaaa.s:415 .text:0000016e Letext\r
+\r
+UNDEFINED SYMBOLS\r
+__do_copy_data\r
+__do_clear_bss\r
+__stack\r
+fdevopen\r
+printf\r
--- /dev/null
+Archive member included because of file (symbol)\r
+\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ hello.o (__do_copy_data)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ hello.o (__do_clear_bss)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o (fdevopen)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ hello.o (printf)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o) (vfprintf)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o) (calloc)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o) (fputc)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o) (malloc)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o) (memset)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_mulhi3.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o) (__mulhi3)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_udivmodsi4.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o) (__udivmodsi4)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_prologue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o) (__prologue_saves__)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_epilogue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o) (__epilogue_restores__)\r
+\r
+Allocating common symbols\r
+Common symbol size file\r
+\r
+__iob 0x6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+\r
+Memory Configuration\r
+\r
+Name Origin Length Attributes\r
+text 0x00000000 0x00002000 xr\r
+data 0x00800060 0x0000ffa0 rw !x\r
+eeprom 0x00810000 0x00010000 rw !x\r
+*default* 0x00000000 0xffffffff\r
+\r
+Linker script and memory map\r
+\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+LOAD hello.o\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a\r
+\r
+.hash\r
+ *(.hash)\r
+\r
+.dynsym\r
+ *(.dynsym)\r
+\r
+.dynstr\r
+ *(.dynstr)\r
+\r
+.gnu.version\r
+ *(.gnu.version)\r
+\r
+.gnu.version_d\r
+ *(.gnu.version_d)\r
+\r
+.gnu.version_r\r
+ *(.gnu.version_r)\r
+\r
+.rel.init\r
+ *(.rel.init)\r
+\r
+.rela.init\r
+ *(.rela.init)\r
+\r
+.rel.text\r
+ *(.rel.text)\r
+ *(.rel.text.*)\r
+ *(.rel.gnu.linkonce.t*)\r
+\r
+.rela.text\r
+ *(.rela.text)\r
+ *(.rela.text.*)\r
+ *(.rela.gnu.linkonce.t*)\r
+\r
+.rel.fini\r
+ *(.rel.fini)\r
+\r
+.rela.fini\r
+ *(.rela.fini)\r
+\r
+.rel.rodata\r
+ *(.rel.rodata)\r
+ *(.rel.rodata.*)\r
+ *(.rel.gnu.linkonce.r*)\r
+\r
+.rela.rodata\r
+ *(.rela.rodata)\r
+ *(.rela.rodata.*)\r
+ *(.rela.gnu.linkonce.r*)\r
+\r
+.rel.data\r
+ *(.rel.data)\r
+ *(.rel.data.*)\r
+ *(.rel.gnu.linkonce.d*)\r
+\r
+.rela.data\r
+ *(.rela.data)\r
+ *(.rela.data.*)\r
+ *(.rela.gnu.linkonce.d*)\r
+\r
+.rel.ctors\r
+ *(.rel.ctors)\r
+\r
+.rela.ctors\r
+ *(.rela.ctors)\r
+\r
+.rel.dtors\r
+ *(.rel.dtors)\r
+\r
+.rela.dtors\r
+ *(.rela.dtors)\r
+\r
+.rel.got\r
+ *(.rel.got)\r
+\r
+.rela.got\r
+ *(.rela.got)\r
+\r
+.rel.bss\r
+ *(.rel.bss)\r
+\r
+.rela.bss\r
+ *(.rela.bss)\r
+\r
+.rel.plt\r
+ *(.rel.plt)\r
+\r
+.rela.plt\r
+ *(.rela.plt)\r
+\r
+.text 0x00000000 0xb1a\r
+ *(.vectors)\r
+ .vectors 0x00000000 0x1c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x00000000 __vectors\r
+ 0x00000000 __vector_default\r
+ 0x0000001c __ctors_start = .\r
+ *(.ctors)\r
+ 0x0000001c __ctors_end = .\r
+ 0x0000001c __dtors_start = .\r
+ *(.dtors)\r
+ 0x0000001c __dtors_end = .\r
+ *(.progmem.gcc*)\r
+ *(.progmem*)\r
+ 0x0000001c . = ALIGN (0x2)\r
+ *(.init0)\r
+ *(.init1)\r
+ *(.init2)\r
+ .init2 0x0000001c 0xc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ *(.init3)\r
+ *(.init4)\r
+ .init4 0x00000028 0x18 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ 0x00000028 __do_copy_data\r
+ .init4 0x00000040 0x10 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ 0x00000040 __do_clear_bss\r
+ *(.init5)\r
+ *(.init6)\r
+ *(.init7)\r
+ *(.init8)\r
+ *(.init9)\r
+ .init9 0x00000050 0x2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ *(.text)\r
+ .text 0x00000052 0x2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x00000052 __vector_1\r
+ 0x00000052 __vector_12\r
+ 0x00000052 __bad_interrupt\r
+ 0x00000052 __vector_6\r
+ 0x00000052 __vector_3\r
+ 0x00000052 __vector_11\r
+ 0x00000052 __vector_13\r
+ 0x00000052 __vector_7\r
+ 0x00000052 __vector_5\r
+ 0x00000052 __vector_4\r
+ 0x00000052 __vector_9\r
+ 0x00000052 __vector_2\r
+ .text 0x00000054 0x16e hello.o\r
+ 0x00000128 uart_send\r
+ 0x00000178 uart_init\r
+ 0x00000094 uart_getc\r
+ 0x00000192 main\r
+ 0x00000054 uart_putc\r
+ 0x000000fa __vector_8\r
+ 0x000000da __vector_10\r
+ .text 0x000001c2 0x8e c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ 0x000001c2 fdevopen\r
+ .text 0x00000250 0x2c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ 0x00000250 printf\r
+ .text 0x0000027c 0x518 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ 0x0000027c vfprintf\r
+ .text 0x00000794 0x30 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ 0x00000794 calloc\r
+ .text 0x000007c4 0x5a c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ 0x000007c4 fputc\r
+ .text 0x0000081e 0x20a c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ 0x0000081e malloc\r
+ 0x00000958 free\r
+ .text 0x00000a28 0x10 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ 0x00000a28 memset\r
+ 0x00000a38 . = ALIGN (0x2)\r
+ *(.text.*)\r
+ .text.libgcc 0x00000a38 0x24 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_mulhi3.o)\r
+ 0x00000a38 __mulhi3\r
+ .text.libgcc 0x00000a5c 0x4e c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_udivmodsi4.o)\r
+ 0x00000a5c __udivmodsi4\r
+ .text.libgcc 0x00000aaa 0x38 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_prologue.o)\r
+ 0x00000aaa __prologue_saves__\r
+ .text.libgcc 0x00000ae2 0x38 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_epilogue.o)\r
+ 0x00000ae2 __epilogue_restores__\r
+ 0x00000b1a . = ALIGN (0x2)\r
+ *(.fini9)\r
+ *(.fini8)\r
+ *(.fini7)\r
+ *(.fini6)\r
+ *(.fini5)\r
+ *(.fini4)\r
+ *(.fini3)\r
+ *(.fini2)\r
+ *(.fini1)\r
+ *(.fini0)\r
+ 0x00000b1a _etext = .\r
+\r
+.data 0x00800060 0x36 load address 0x00000b1a\r
+ 0x00800060 PROVIDE (__data_start, .)\r
+ *(.data)\r
+ .data 0x00800060 0x30 hello.o\r
+ .data 0x00800090 0x6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ 0x00800092 __malloc_heap_start\r
+ 0x00800094 __malloc_heap_end\r
+ 0x00800090 __malloc_margin\r
+ *(.gnu.linkonce.d*)\r
+ 0x00800096 . = ALIGN (0x2)\r
+ 0x00800096 _edata = .\r
+ 0x00800096 PROVIDE (__data_end, .)\r
+\r
+.bss 0x00800096 0xd\r
+ 0x00800096 PROVIDE (__bss_start, .)\r
+ *(.bss)\r
+ .bss 0x00800096 0x3 hello.o\r
+ .bss 0x00800099 0x4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ *(COMMON)\r
+ COMMON 0x0080009d 0x6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ 0x0 (size before relaxing)\r
+ 0x0080009d __iob\r
+ 0x008000a3 PROVIDE (__bss_end, .)\r
+ 0x00000b1a __data_load_start = LOADADDR (.data)\r
+ 0x00000b50 __data_load_end = (__data_load_start + SIZEOF (.data))\r
+\r
+.noinit 0x008000a3 0x0\r
+ 0x008000a3 PROVIDE (__noinit_start, .)\r
+ *(.noinit*)\r
+ 0x008000a3 PROVIDE (__noinit_end, .)\r
+ 0x008000a3 _end = .\r
+ 0x008000a3 PROVIDE (__heap_start, .)\r
+\r
+.eeprom 0x00810000 0x0 load address 0x00000b50\r
+ *(.eeprom*)\r
+ 0x00810000 __eeprom_end = .\r
+\r
+.stab 0x00000000 0x1f50\r
+ *(.stab)\r
+ .stab 0x00000000 0x2a0 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ .stab 0x000002a0 0x54c hello.o\r
+ 0x558 (size before relaxing)\r
+ .stab 0x000007ec 0x3e4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ 0x3f0 (size before relaxing)\r
+ .stab 0x00000bd0 0x1d4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ 0x2ac (size before relaxing)\r
+ .stab 0x00000da4 0x7b0 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ 0x8a0 (size before relaxing)\r
+ .stab 0x00001554 0x21c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ 0x264 (size before relaxing)\r
+ .stab 0x00001770 0x204 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ 0x2f4 (size before relaxing)\r
+ .stab 0x00001974 0x570 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ 0x5d0 (size before relaxing)\r
+ .stab 0x00001ee4 0x6c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ 0x78 (size before relaxing)\r
+\r
+.stabstr 0x00000000 0x1107\r
+ *(.stabstr)\r
+ .stabstr 0x00000000 0x1107 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x0 (size before relaxing)\r
+\r
+.stab.excl\r
+ *(.stab.excl)\r
+\r
+.stab.exclstr\r
+ *(.stab.exclstr)\r
+\r
+.stab.index\r
+ *(.stab.index)\r
+\r
+.stab.indexstr\r
+ *(.stab.indexstr)\r
+\r
+.comment\r
+ *(.comment)\r
+\r
+.debug\r
+ *(.debug)\r
+\r
+.line\r
+ *(.line)\r
+\r
+.debug_srcinfo\r
+ *(.debug_srcinfo)\r
+\r
+.debug_sfnames\r
+ *(.debug_sfnames)\r
+\r
+.debug_aranges\r
+ *(.debug_aranges)\r
+\r
+.debug_pubnames\r
+ *(.debug_pubnames)\r
+\r
+.debug_info\r
+ *(.debug_info)\r
+ *(.gnu.linkonce.wi.*)\r
+\r
+.debug_abbrev\r
+ *(.debug_abbrev)\r
+\r
+.debug_line\r
+ *(.debug_line)\r
+\r
+.debug_frame\r
+ *(.debug_frame)\r
+\r
+.debug_str\r
+ *(.debug_str)\r
+\r
+.debug_loc\r
+ *(.debug_loc)\r
+\r
+.debug_macinfo\r
+ *(.debug_macinfo)\r
+OUTPUT(hello.elf elf32-avr)\r
+\r
+Cross Reference Table\r
+\r
+Symbol File\r
+__bad_interrupt c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__bss_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+__bss_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+__data_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__data_load_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__data_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__do_clear_bss c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o\r
+__do_copy_data c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o\r
+__epilogue_restores__ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_epilogue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+__heap_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__heap_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__init c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__iob c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+__malloc_heap_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__malloc_heap_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__malloc_margin c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__mulhi3 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_mulhi3.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+__prologue_saves__ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_prologue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+__stack c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ hello.o\r
+__udivmodsi4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_udivmodsi4.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+__vector_1 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_10 hello.o\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_11 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_12 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_13 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_3 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_5 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_7 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_8 hello.o\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_9 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_default c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vectors c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+calloc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+fdevopen c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o\r
+fputc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+free c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+main hello.o\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+malloc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+memset c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+printf c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ hello.o\r
+uart_getc hello.o\r
+uart_init hello.o\r
+uart_putc hello.o\r
+uart_send hello.o\r
+vfprintf c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
--- /dev/null
+ .file "hello.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+ .stabs "c:\\uzi\\src\\avrsample/",100,0,0,.Ltext0\r
+ .stabs "hello.c",100,0,0,.Ltext0\r
+ .text\r
+.Ltext0:\r
+ .stabs "gcc2_compiled.",60,0,0,0\r
+ .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0\r
+ .stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0\r
+ .stabs "long int:t(0,3)=@s32;r(0,3);0020000000000;0017777777777;",128,0,0,0\r
+ .stabs "unsigned int:t(0,4)=r(0,4);0000000000000;0000000177777;",128,0,0,0\r
+ .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0000000000000;0037777777777;",128,0,0,0\r
+ .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,0\r
+ .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;",128,0,0,0\r
+ .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0\r
+ .stabs "short unsigned int:t(0,9)=r(0,9);0000000000000;0000000177777;",128,0,0,0\r
+ .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0\r
+ .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0\r
+ .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "complex int:t(0,15)=s4real:(0,1),0,16;imag:(0,1),16,16;;",128,0,0,0\r
+ .stabs "complex float:t(0,16)=r(0,16);8;0;",128,0,0,0\r
+ .stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0\r
+ .stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0\r
+ .stabs "__builtin_va_list:t(0,19)=*(0,20)=(0,20)",128,0,0,0\r
+ .stabs "_Bool:t(0,21)=@s8;-16;",128,0,0,0\r
+ .stabs "hello.c",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/stdio.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/inttypes.h",130,0,0,0\r
+ .stabs "int8_t:t(3,1)=(0,10)",128,0,46,0\r
+ .stabs "uint8_t:t(3,2)=(0,11)",128,0,47,0\r
+ .stabs "int16_t:t(3,3)=(0,1)",128,0,49,0\r
+ .stabs "uint16_t:t(3,4)=(0,4)",128,0,50,0\r
+ .stabs "int32_t:t(3,5)=(0,3)",128,0,52,0\r
+ .stabs "uint32_t:t(3,6)=(0,5)",128,0,53,0\r
+ .stabs "int64_t:t(3,7)=(0,6)",128,0,55,0\r
+ .stabs "uint64_t:t(3,8)=(0,7)",128,0,56,0\r
+ .stabs "intptr_t:t(3,9)=(3,3)",128,0,58,0\r
+ .stabs "uintptr_t:t(3,10)=(3,4)",128,0,59,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stdarg.h",130,0,0,0\r
+ .stabs "__gnuc_va_list:t(4,1)=(0,19)",128,0,43,0\r
+ .stabs "va_list:t(4,2)=(4,1)",128,0,105,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stddef.h",130,0,0,0\r
+ .stabs "size_t:t(5,1)=(0,4)",128,0,213,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/io.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/io4433.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/sfr_defs.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/interrupt.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/signal.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "hello.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "uart_putc:F(0,1)",36,0,14,uart_putc\r
+ .stabs "c:p(0,2)",160,0,13,1\r
+.global uart_putc\r
+ .type uart_putc, @function\r
+uart_putc:\r
+ .stabn 68,0,14,.LM1-uart_putc\r
+.LM1:\r
+/* prologue: frame size=1 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,1\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ .stabn 68,0,15,.LM2-uart_putc\r
+.LM2:\r
+.L4:\r
+ lds r24,43\r
+ clr r25\r
+ andi r24,lo8(32)\r
+ andi r25,hi8(32)\r
+ sbiw r24,0\r
+ breq .L4\r
+ .stabn 68,0,17,.LM3-uart_putc\r
+.LM3:\r
+ ldd r24,Y+1\r
+ sts 44,r24\r
+ .stabn 68,0,18,.LM4-uart_putc\r
+.LM4:\r
+ ldi r24,lo8(0)\r
+ ldi r25,hi8(0)\r
+ .stabn 68,0,19,.LM5-uart_putc\r
+.LM5:\r
+/* epilogue: frame size=1 */\r
+ adiw r28,1\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function uart_putc size 32 (13) */\r
+ .size uart_putc, .-uart_putc\r
+.Lscope0:\r
+ .stabs "",36,0,0,.Lscope0-uart_putc\r
+ .stabs "uart_getc:F(0,1)",36,0,22,uart_getc\r
+.global uart_getc\r
+ .type uart_getc, @function\r
+uart_getc:\r
+ .stabn 68,0,22,.LM6-uart_getc\r
+.LM6:\r
+/* prologue: frame size=2 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,2\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ .stabn 68,0,23,.LM7-uart_getc\r
+.LM7:\r
+ lds r24,43\r
+ tst r24\r
+ brlt .L8\r
+ .stabn 68,0,24,.LM8-uart_getc\r
+.LM8:\r
+ ldi r24,lo8(-1)\r
+ ldi r25,hi8(-1)\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ rjmp .L7\r
+.L8:\r
+ .stabn 68,0,25,.LM9-uart_getc\r
+.LM9:\r
+ lds r24,44\r
+ clr r25\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ .stabn 68,0,26,.LM10-uart_getc\r
+.LM10:\r
+.L7:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+/* epilogue: frame size=2 */\r
+ adiw r28,2\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function uart_getc size 35 (16) */\r
+ .size uart_getc, .-uart_getc\r
+.Lscope1:\r
+ .stabs "",36,0,0,.Lscope1-uart_getc\r
+ .stabs "__vector_10:F(0,20)",36,0,35,__vector_10\r
+.global __vector_10\r
+ .type __vector_10, @function\r
+__vector_10:\r
+ .stabn 68,0,35,.LM11-__vector_10\r
+.LM11:\r
+/* prologue: frame size=0 */\r
+ push __zero_reg__\r
+ push __tmp_reg__\r
+ in __tmp_reg__,__SREG__\r
+ push __tmp_reg__\r
+ clr __zero_reg__\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+/* prologue end (size=9) */\r
+ .stabn 68,0,48,.LM12-__vector_10\r
+.LM12:\r
+/* epilogue: frame size=0 */\r
+ pop r29\r
+ pop r28\r
+ pop __tmp_reg__\r
+ out __SREG__,__tmp_reg__\r
+ pop __tmp_reg__\r
+ pop __zero_reg__\r
+ reti\r
+/* epilogue end (size=7) */\r
+/* function __vector_10 size 16 (0) */\r
+ .size __vector_10, .-__vector_10\r
+.Lscope2:\r
+ .stabs "",36,0,0,.Lscope2-__vector_10\r
+ .stabs "__vector_8:F(0,20)",36,0,53,__vector_8\r
+.global __vector_8\r
+ .type __vector_8, @function\r
+__vector_8:\r
+ .stabn 68,0,53,.LM13-__vector_8\r
+.LM13:\r
+/* prologue: frame size=0 */\r
+ push __zero_reg__\r
+ push __tmp_reg__\r
+ in __tmp_reg__,__SREG__\r
+ push __tmp_reg__\r
+ clr __zero_reg__\r
+ push r24\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+/* prologue end (size=10) */\r
+ .stabn 68,0,56,.LM14-__vector_8\r
+.LM14:\r
+.LBB2:\r
+ lds r24,44\r
+ .stabn 68,0,58,.LM15-__vector_8\r
+.LM15:\r
+ subi r24,lo8(-(1))\r
+ sts 44,r24\r
+ .stabn 68,0,62,.LM16-__vector_8\r
+.LM16:\r
+.LBE2:\r
+/* epilogue: frame size=0 */\r
+ pop r29\r
+ pop r28\r
+ pop r24\r
+ pop __tmp_reg__\r
+ out __SREG__,__tmp_reg__\r
+ pop __tmp_reg__\r
+ pop __zero_reg__\r
+ reti\r
+/* epilogue end (size=8) */\r
+/* function __vector_8 size 23 (5) */\r
+ .size __vector_8, .-__vector_8\r
+ .stabs "led:r(0,2)",64,0,54,24\r
+ .stabn 192,0,0,.LBB2-__vector_8\r
+ .stabn 224,0,0,.LBE2-__vector_8\r
+.Lscope3:\r
+ .stabs "",36,0,0,.Lscope3-__vector_8\r
+ .stabs "uart_send:F(0,20)",36,0,67,uart_send\r
+ .stabs "buf:p(1,1)=*(0,11)",160,0,65,1\r
+ .stabs "size:p(0,11)",160,0,65,3\r
+.global uart_send\r
+ .type uart_send, @function\r
+uart_send:\r
+ .stabn 68,0,67,.LM17-uart_send\r
+.LM17:\r
+/* prologue: frame size=3 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,3\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ std Y+3,r22\r
+ .stabn 68,0,68,.LM18-uart_send\r
+.LM18:\r
+ lds r24,uart_counter\r
+ tst r24\r
+ brne .L11\r
+ .stabn 68,0,70,.LM19-uart_send\r
+.LM19:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sts (uart_data_ptr)+1,r25\r
+ sts uart_data_ptr,r24\r
+ .stabn 68,0,71,.LM20-uart_send\r
+.LM20:\r
+ ldd r24,Y+3\r
+ sts uart_counter,r24\r
+ .stabn 68,0,72,.LM21-uart_send\r
+.LM21:\r
+ ldd r30,Y+1\r
+ ldd r31,Y+2\r
+ ld r24,Z\r
+ sts 44,r24\r
+ .stabn 68,0,74,.LM22-uart_send\r
+.LM22:\r
+.L11:\r
+/* epilogue: frame size=3 */\r
+ adiw r28,3\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function uart_send size 40 (21) */\r
+ .size uart_send, .-uart_send\r
+.Lscope4:\r
+ .stabs "",36,0,0,.Lscope4-uart_send\r
+ .stabs "uart_init:F(0,20)",36,0,79,uart_init\r
+.global uart_init\r
+ .type uart_init, @function\r
+uart_init:\r
+ .stabn 68,0,79,.LM23-uart_init\r
+.LM23:\r
+/* prologue: frame size=0 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+/* prologue end (size=4) */\r
+ .stabn 68,0,81,.LM24-uart_init\r
+.LM24:\r
+ ldi r24,lo8(-72)\r
+ sts 42,r24\r
+ .stabn 68,0,83,.LM25-uart_init\r
+.LM25:\r
+ ldi r24,lo8(71)\r
+ sts 41,r24\r
+ .stabn 68,0,84,.LM26-uart_init\r
+.LM26:\r
+/* epilogue: frame size=0 */\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=3) */\r
+/* function uart_init size 13 (6) */\r
+ .size uart_init, .-uart_init\r
+.Lscope5:\r
+ .stabs "",36,0,0,.Lscope5-uart_init\r
+ .data\r
+.LC0:\r
+ .string "hello, world\r\n"\r
+.LC1:\r
+ .string "Serial Data from AVR received###"\r
+ .text\r
+ .stabs "main:F(0,1)",36,0,87,main\r
+.global main\r
+ .type main, @function\r
+main:\r
+ .stabn 68,0,87,.LM27-main\r
+.LM27:\r
+/* prologue: frame size=0 */\r
+ ldi r28,lo8(__stack - 0)\r
+ ldi r29,hi8(__stack - 0)\r
+ out __SP_H__,r29\r
+ out __SP_L__,r28\r
+/* prologue end (size=4) */\r
+ .stabn 68,0,90,.LM28-main\r
+.LM28:\r
+ rcall uart_init\r
+ .stabn 68,0,107,.LM29-main\r
+.LM29:\r
+ ldi r20,lo8(0)\r
+ ldi r21,hi8(0)\r
+ ldi r22,lo8(pm(uart_getc))\r
+ ldi r23,hi8(pm(uart_getc))\r
+ ldi r24,lo8(pm(uart_putc))\r
+ ldi r25,hi8(pm(uart_putc))\r
+ rcall fdevopen\r
+ .stabn 68,0,110,.LM30-main\r
+.LM30:\r
+ ldi r24,lo8(.LC0)\r
+ ldi r25,hi8(.LC0)\r
+ push r25\r
+ push r24\r
+ rcall printf\r
+ pop __tmp_reg__\r
+ pop __tmp_reg__\r
+ .stabn 68,0,111,.LM31-main\r
+.LM31:\r
+ ldi r22,lo8(32)\r
+ ldi r24,lo8(.LC1)\r
+ ldi r25,hi8(.LC1)\r
+ rcall uart_send\r
+ .stabn 68,0,115,.LM32-main\r
+.LM32:\r
+.L15:\r
+ rjmp .L15\r
+ .stabn 68,0,117,.LM33-main\r
+.LM33:\r
+/* epilogue: frame size=0 */\r
+/* epilogue: noreturn */\r
+/* epilogue end (size=0) */\r
+/* function main size 24 (20) */\r
+ .size main, .-main\r
+.Lscope6:\r
+ .stabs "",36,0,0,.Lscope6-main\r
+ .lcomm uart_data_ptr,2\r
+ .lcomm uart_counter,1\r
+ .stabs "uart_data_ptr:S(1,2)=*(1,3)=B(0,11)",40,0,29,uart_data_ptr\r
+ .stabs "uart_counter:S(1,3)",40,0,30,uart_counter\r
+ .text\r
+ .stabs "",100,0,0,Letext\r
+Letext:\r
+/* File "hello.c": code 183 = 0x00b7 ( 81), prologues 57, epilogues 45 */\r
--- /dev/null
+/*
+ * Copyright (c) 2002 Joerg Wunsch
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id: calloc.c,v 1.1 2002/10/12 19:37:29 joerg_wunsch Exp $
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+void *
+calloc(size_t nele, size_t size)
+{
+ void *p;
+
+ if ((p = malloc(nele * size)) == 0)
+ return 0;
+ memset(p, 0, nele * size);
+ return p;
+}
--- /dev/null
+ .file "calloc.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+ .text\r
+.global calloc\r
+ .type calloc, @function\r
+calloc:\r
+/* prologue: frame size=8 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,8\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ std Y+3,r22\r
+ std Y+4,r23\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ ldd r18,Y+3\r
+ ldd r19,Y+4\r
+ mov r23,r19\r
+ mov r22,r18\r
+ rcall __mulhi3\r
+ rcall malloc\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ brne .L7\r
+ std Y+7,__zero_reg__\r
+ std Y+8,__zero_reg__\r
+ rjmp .L6\r
+.L7:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ ldd r18,Y+3\r
+ ldd r19,Y+4\r
+ mov r23,r19\r
+ mov r22,r18\r
+ rcall __mulhi3\r
+ mov r20,r24\r
+ mov r21,r25\r
+ ldi r22,lo8(0)\r
+ ldi r23,hi8(0)\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ rcall memset\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+.L6:\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+/* epilogue: frame size=8 */\r
+ adiw r28,8\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function calloc size 60 (41) */\r
+ .size calloc, .-calloc\r
+/* File "calloc.c": code 60 = 0x003c ( 41), prologues 10, epilogues 9 */\r
--- /dev/null
+/* Copyright (c) 2002, Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* $Id: fdevopen.c,v 1.3 2003/03/17 17:49:46 troth Exp $ */
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "stdio_private.h"
+
+FILE *__iob[3]; /* stdin, stdout, stderr */
+
+/** \ingroup avr_stdio
+ This function is a replacement for \c fopen().
+
+ It opens a stream for a device where the actual device
+ implementation needs to be provided by the application. If
+ successful, a pointer to the structure for the opened stream is
+ returned. Reasons for a possible failure currently include that
+ neither the \c put nor the \c get argument have been provided, thus
+ attempting to open a stream with no IO intent at all, or that
+ insufficient dynamic memory is available to establish a new stream.
+
+ If the \c put function pointer is provided, the stream is opened
+ with write intent. The function passed as \c put shall take one
+ character to write to the device as argument , and shall return 0
+ if the output was successful, and a nonzero value if the character
+ could not be sent to the device.
+
+ If the \c get function pointer is provided, the stream is opened
+ with read intent. The function passed as \c get shall take no
+ arguments, and return one character from the device, passed as an
+ \c int type. If an error occurs when trying to read from the
+ device, it shall return \c -1.
+
+ If both functions are provided, the stream is opened with read
+ and write intent.
+
+ The first stream opened with read intent is assigned to \c stdin,
+ and the first one opened with write intent is assigned to both,
+ \c stdout and \c stderr.
+
+ The third parameter \c opts is currently unused, but reserved for
+ future extensions. */
+
+FILE *
+fdevopen(int (*put)(char), int (*get)(void), int opts __attribute__((unused)))
+{
+ FILE *s;
+
+ if (put == 0 && get == 0)
+ return 0;
+
+ if ((s = calloc(1, sizeof(FILE))) == 0)
+ return 0;
+
+ if (get != 0) {
+ s->get = get;
+ s->flags = __SRD;
+ if (stdin == 0)
+ stdin = s;
+ }
+
+ if (put != 0) {
+ s->put = put;
+ s->flags |= __SWR;
+ if (stdout == 0) {
+ stdout = s;
+ if (stderr == 0)
+ stderr = s;
+ }
+ }
+
+ return s;
+}
--- /dev/null
+ .file "fdevopen.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+ .text\r
+.global fdevopen\r
+ .type fdevopen, @function\r
+fdevopen:\r
+/* prologue: frame size=10 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,10\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ std Y+3,r22\r
+ std Y+4,r23\r
+ std Y+5,r20\r
+ std Y+6,r21\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sbiw r24,0\r
+ brne .L7\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L7\r
+ std Y+9,__zero_reg__\r
+ std Y+10,__zero_reg__\r
+ rjmp .L6\r
+.L7:\r
+ ldi r22,lo8(12)\r
+ ldi r23,hi8(12)\r
+ ldi r24,lo8(1)\r
+ ldi r25,hi8(1)\r
+ rcall calloc\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sbiw r24,0\r
+ brne .L8\r
+ std Y+9,__zero_reg__\r
+ std Y+10,__zero_reg__\r
+ rjmp .L6\r
+.L8:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ breq .L9\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Z+10,r24\r
+ std Z+11,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldi r24,lo8(1)\r
+ std Z+3,r24\r
+ lds r24,__iob\r
+ lds r25,(__iob)+1\r
+ sbiw r24,0\r
+ brne .L9\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (__iob)+1,r25\r
+ sts __iob,r24\r
+.L9:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sbiw r24,0\r
+ breq .L11\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ std Z+8,r24\r
+ std Z+9,r25\r
+ ldd r26,Y+7\r
+ ldd r27,Y+8\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Z+3\r
+ ori r24,lo8(2)\r
+ mov r31,r27\r
+ mov r30,r26\r
+ std Z+3,r24\r
+ lds r24,__iob+2\r
+ lds r25,(__iob+2)+1\r
+ sbiw r24,0\r
+ brne .L11\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (__iob+2)+1,r25\r
+ sts __iob+2,r24\r
+ lds r24,__iob+4\r
+ lds r25,(__iob+4)+1\r
+ sbiw r24,0\r
+ brne .L11\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (__iob+4)+1,r25\r
+ sts __iob+4,r24\r
+.L11:\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+.L6:\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+/* epilogue: frame size=10 */\r
+ adiw r28,10\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function fdevopen size 125 (106) */\r
+ .size fdevopen, .-fdevopen\r
+ .comm __iob,6,1\r
+/* File "fdevopen.c": code 125 = 0x007d ( 106), prologues 10, epilogues 9 */\r
--- /dev/null
+/* Copyright (c) 2002, Marek Michalkiewicz <marekm@amelek.gda.pl>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+#if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
+#error "GCC version >= 3.3 required"
+#endif
+
+#include "macros.inc"
+
+ .macro vector name
+ .if (. - __vectors < _VECTORS_SIZE)
+ .weak \name
+ .set \name, __bad_interrupt
+ XJMP \name
+ .endif
+ .endm
+
+ .section .vectors,"ax",@progbits
+ .global __vectors
+ .func __vectors
+__vectors:
+ XJMP __init
+ vector __vector_1
+ vector __vector_2
+ vector __vector_3
+ vector __vector_4
+ vector __vector_5
+ vector __vector_6
+ vector __vector_7
+ vector __vector_8
+ vector __vector_9
+ vector __vector_10
+ vector __vector_11
+ vector __vector_12
+ vector __vector_13
+ vector __vector_14
+ vector __vector_15
+ vector __vector_16
+ vector __vector_17
+ vector __vector_18
+ vector __vector_19
+ vector __vector_20
+ vector __vector_21
+ vector __vector_22
+ vector __vector_23
+ vector __vector_24
+ vector __vector_25
+ vector __vector_26
+ vector __vector_27
+ vector __vector_28
+ vector __vector_29
+ vector __vector_30
+ vector __vector_31
+ vector __vector_32
+ vector __vector_33
+ vector __vector_34
+ vector __vector_35
+ vector __vector_36
+ vector __vector_37
+ vector __vector_38
+ vector __vector_39
+ .endfunc
+
+ /* Handle unexpected interrupts (enabled and no handler), which
+ usually indicate a bug. Jump to the __vector_default function
+ if defined by the user, otherwise jump to the reset address.
+
+ This must be in a different section, otherwise the assembler
+ will resolve "rjmp" offsets and there will be no relocs. */
+
+ .text
+ .global __bad_interrupt
+ .func __bad_interrupt
+__bad_interrupt:
+ .weak __vector_default
+ .set __vector_default, __vectors
+ XJMP __vector_default
+ .endfunc
+
+ .section .init0,"ax",@progbits
+ .weak __init
+; .func __init
+__init:
+
+#ifndef __AVR_ASM_ONLY__
+ .weak __stack
+ .set __stack, RAMEND
+
+ /* By default, malloc() uses the current value of the stack pointer
+ minus __malloc_margin as the highest available address.
+
+ In some applications with external SRAM, the stack can be below
+ the data section (in the internal SRAM - faster), and __heap_end
+ should be set to the highest address available for malloc(). */
+ .weak __heap_end
+ .set __heap_end, 0
+
+ .section .init2,"ax",@progbits
+ clr __zero_reg__
+ out _SFR_IO_ADDR(SREG), __zero_reg__
+ ldi r28,lo8(__stack)
+#ifdef SPH
+ ldi r29,hi8(__stack)
+ out _SFR_IO_ADDR(SPH), r29
+#endif
+ out _SFR_IO_ADDR(SPL), r28
+
+#if BIG_CODE
+ /* Only for >64K devices with RAMPZ, replaces the default code
+ provided by libgcc.S which is only linked in if necessary. */
+
+ .section .init4,"ax",@progbits
+ .global __do_copy_data
+__do_copy_data:
+ ldi r17, hi8(__data_end)
+ ldi r26, lo8(__data_start)
+ ldi r27, hi8(__data_start)
+ ldi r30, lo8(__data_load_start)
+ ldi r31, hi8(__data_load_start)
+
+ /* On the enhanced core, "elpm" with post-increment updates RAMPZ
+ automatically. Otherwise we have to handle it ourselves. */
+
+#ifdef __AVR_ENHANCED__
+ ldi r16, hh8(__data_load_start)
+#else
+ ldi r16, hh8(__data_load_start - 0x10000)
+.__do_copy_data_carry:
+ inc r16
+#endif
+ out _SFR_IO_ADDR(RAMPZ), r16
+ rjmp .__do_copy_data_start
+.__do_copy_data_loop:
+#ifdef __AVR_ENHANCED__
+ elpm r0, Z+
+#else
+ lpm
+#endif
+ st X+, r0
+#ifndef __AVR_ENHANCED__
+ adiw r30, 1
+ brcs .__do_copy_data_carry
+#endif
+.__do_copy_data_start:
+ cpi r26, lo8(__data_end)
+ cpc r27, r17
+ brne .__do_copy_data_loop
+#endif /* BIG_CODE */
+
+#endif /* !__AVR_ASM_ONLY__ */
+
+ .section .init9,"ax",@progbits
+ XJMP main
+; .endfunc
+
--- /dev/null
+# 1 "gcrt1.S"\r
+# 1 "<built-in>"\r
+# 1 "<command line>"\r
+# 1 "gcrt1.S"\r
+# 30 "gcrt1.S"\r
+# 1 "macros.inc" 1\r
+# 33 "macros.inc"\r
+# 1 "c:/WinAVR/avr/include/avr/io.h" 1 3\r
+# 81 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/sfr_defs.h" 1 3\r
+# 82 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 197 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/io4433.h" 1 3\r
+# 198 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 34 "macros.inc" 2\r
+# 124 "macros.inc"\r
+ .macro X_movw dest src\r
+ .if ((\src) - (\dest))\r
+ .if (((\src) | (\dest)) & 0x01)\r
+ .if (((\src)-(\dest)) & 0x80)\r
+ mov (\dest)+1, (\src)+1\r
+ mov (\dest), (\src)\r
+ .else\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+ .endif\r
+ .else\r
+\r
+\r
+\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+\r
+ .endif\r
+ .endif\r
+ .endm\r
+# 176 "macros.inc"\r
+ .macro LPM_R0_ZPLUS_INIT hhi\r
+\r
+\r
+\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZPLUS_NEXT hhi\r
+# 202 "macros.inc"\r
+ lpm\r
+ adiw r30,1\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZP\r
+\r
+\r
+\r
+ lpm\r
+ adiw r30,1\r
+\r
+ .endm\r
+# 31 "gcrt1.S" 2\r
+\r
+ .macro vector name\r
+ .if (. - __vectors < 28)\r
+ .weak \name\r
+ .set \name, __bad_interrupt\r
+ rjmp \name\r
+ .endif\r
+ .endm\r
+\r
+ .section .vectors,"ax",@progbits\r
+ .global __vectors\r
+ .func __vectors\r
+__vectors:\r
+ rjmp __init\r
+ vector __vector_1\r
+ vector __vector_2\r
+ vector __vector_3\r
+ vector __vector_4\r
+ vector __vector_5\r
+ vector __vector_6\r
+ vector __vector_7\r
+ vector __vector_8\r
+ vector __vector_9\r
+ vector __vector_10\r
+ vector __vector_11\r
+ vector __vector_12\r
+ vector __vector_13\r
+ vector __vector_14\r
+ vector __vector_15\r
+ vector __vector_16\r
+ vector __vector_17\r
+ vector __vector_18\r
+ vector __vector_19\r
+ vector __vector_20\r
+ vector __vector_21\r
+ vector __vector_22\r
+ vector __vector_23\r
+ vector __vector_24\r
+ vector __vector_25\r
+ vector __vector_26\r
+ vector __vector_27\r
+ vector __vector_28\r
+ vector __vector_29\r
+ vector __vector_30\r
+ vector __vector_31\r
+ vector __vector_32\r
+ vector __vector_33\r
+ vector __vector_34\r
+ vector __vector_35\r
+ vector __vector_36\r
+ vector __vector_37\r
+ vector __vector_38\r
+ vector __vector_39\r
+ .endfunc\r
+# 93 "gcrt1.S"\r
+ .text\r
+ .global __bad_interrupt\r
+ .func __bad_interrupt\r
+__bad_interrupt:\r
+ .weak __vector_default\r
+ .set __vector_default, __vectors\r
+ rjmp __vector_default\r
+ .endfunc\r
+\r
+ .section .init0,"ax",@progbits\r
+ .weak __init\r
+; .func __init\r
+__init:\r
+\r
+\r
+ .weak __stack\r
+ .set __stack, 0xDF\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ .weak __heap_end\r
+ .set __heap_end, 0\r
+\r
+ .section .init2,"ax",@progbits\r
+ clr r1\r
+ out ((((0x3F) + 0x20)) - 0x20), r1\r
+ ldi r28,lo8(__stack)\r
+\r
+\r
+\r
+\r
+ out ((((0x3D) + 0x20)) - 0x20), r28\r
+# 174 "gcrt1.S"\r
+ .section .init9,"ax",@progbits\r
+ rjmp main\r
+; .endfunc\r
--- /dev/null
+/* Copyright (c) 2002, Marek Michalkiewicz
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+/*
+ macros.inc - macros for use in assembler sources
+
+ Contributors:
+ Created by Marek Michalkiewicz <marekm@linux.org.pl>
+ */
+
+#include <avr/io.h>
+
+/* if not defined, assume old version with underscores */
+#ifndef __USER_LABEL_PREFIX__
+#define __USER_LABEL_PREFIX__ _
+#endif
+
+#ifndef __REGISTER_PREFIX__
+#define __REGISTER_PREFIX__
+#endif
+
+/* the assembler line separator (just in case it ever changes) */
+#define _L $
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+#define _U(x) CONCAT1(__USER_LABEL_PREFIX__, x)
+
+#define _R(x) CONCAT1(__REGISTER_PREFIX__, x)
+
+/* these should help to fix the "can't have function named r1()" bug
+ which may require adding '%' in front of register names. */
+
+#define r0 _R(r0)
+#define r1 _R(r1)
+#define r2 _R(r2)
+#define r3 _R(r3)
+#define r4 _R(r4)
+#define r5 _R(r5)
+#define r6 _R(r6)
+#define r7 _R(r7)
+#define r8 _R(r8)
+#define r9 _R(r9)
+#define r10 _R(r10)
+#define r11 _R(r11)
+#define r12 _R(r12)
+#define r13 _R(r13)
+#define r14 _R(r14)
+#define r15 _R(r15)
+#define r16 _R(r16)
+#define r17 _R(r17)
+#define r18 _R(r18)
+#define r19 _R(r19)
+#define r20 _R(r20)
+#define r21 _R(r21)
+#define r22 _R(r22)
+#define r23 _R(r23)
+#define r24 _R(r24)
+#define r25 _R(r25)
+#define r26 _R(r26)
+#define r27 _R(r27)
+#define r28 _R(r28)
+#define r29 _R(r29)
+#define r30 _R(r30)
+#define r31 _R(r31)
+
+#ifndef __tmp_reg__
+#define __tmp_reg__ r0
+#endif
+
+#ifndef __zero_reg__
+#define __zero_reg__ r1
+#endif
+
+#if __AVR_MEGA__
+ #define XJMP jmp
+ #define XCALL call
+#else
+ #define XJMP rjmp
+ #define XCALL rcall
+#endif
+
+/* used only by fplib/strtod.S - libgcc internal function calls */
+#define PROLOGUE_SAVES(offset) XJMP (__prologue_saves__ + 2 * (offset))
+#define EPILOGUE_RESTORES(offset) XJMP (__epilogue_restores__ + 2 * (offset))
+
+#if FLASHEND > 0x10000 /* ATmega103 */
+ #define BIG_CODE 1
+#else
+ #define BIG_CODE 0
+#endif
+
+/*
+ Smart version of movw (use register numbers as arguments):
+ - uses "movw" if possible (supported by MCU, and both registers even)
+ - handles overlapping register pairs correctly
+ - no instruction generated if source and destination are the same
+ (may expand to 0, 1 or 2 instructions).
+ */
+
+ .macro X_movw dest src
+ .if ((\src) - (\dest)) /* different registers */
+ .if (((\src) | (\dest)) & 0x01)
+ .if (((\src)-(\dest)) & 0x80) /* src < dest */
+ mov (\dest)+1, (\src)+1
+ mov (\dest), (\src)
+ .else /* src > dest */
+ mov (\dest), (\src)
+ mov (\dest)+1, (\src)+1
+ .endif
+ .else /* both even -> overlap not possible */
+#if __AVR_ENHANCED__
+ movw (\dest), (\src)
+#else
+ mov (\dest), (\src)
+ mov (\dest)+1, (\src)+1
+#endif
+ .endif
+ .endif
+ .endm
+
+#if __AVR_ENHANCED__
+ #define LOAD_X(lo, hi) movw r26, lo
+ #define LOAD_Z(lo, hi) movw r30, lo
+#else
+ #define LOAD_X(lo, hi) \
+ mov r26, lo _L\
+ mov r27, hi
+
+ #define LOAD_Z(lo, hi) \
+ mov r30, lo _L\
+ mov r31, hi
+#endif
+
+/* LOAD_X_CONST(p) loads constant P into pointer register X. */
+#define LOAD_X_CONST(p) \
+ ldi r26, lo8(p) _L\
+ ldi r27, hi8(p)
+
+/*
+ LPM_R0_ZPLUS_INIT is used before the loop to initialize RAMPZ
+ for future devices with RAMPZ:Z auto-increment - [e]lpm r0, Z+.
+
+ LPM_R0_ZPLUS_NEXT is used inside the loop to load a byte from
+ the program memory at [RAMPZ:]Z to R0, and increment [RAMPZ:]Z.
+
+ The argument in both macros is a register that contains the
+ high byte (bits 23-16) of the address, bits 15-0 should be in
+ the Z (r31:r30) register. It can be any register except for:
+ r0, r1 (__zero_reg__ - assumed to always contain 0), r30, r31.
+ */
+
+ .macro LPM_R0_ZPLUS_INIT hhi
+#if __AVR_ENHANCED__
+ #if BIG_CODE
+ out _SFR_IO_ADDR(RAMPZ), \hhi
+ #endif
+#endif
+ .endm
+
+ .macro LPM_R0_ZPLUS_NEXT hhi
+#if __AVR_ENHANCED__
+ #if BIG_CODE
+ /* ELPM with RAMPZ:Z post-increment, load RAMPZ only once */
+ elpm r0, Z+
+ #else
+ /* LPM with Z post-increment, max 64K, no RAMPZ (ATmega83/161/163/32) */
+ lpm r0, Z+
+ #endif
+#else
+ #if BIG_CODE
+ /* ELPM without post-increment, load RAMPZ each time (ATmega103) */
+ out _SFR_IO_ADDR(RAMPZ), \hhi
+ elpm
+ adiw r30,1
+ adc \hhi, __zero_reg__
+ #else
+ /* LPM without post-increment, max 64K, no RAMPZ (AT90S*) */
+ lpm
+ adiw r30,1
+ #endif
+#endif
+ .endm
+
+ .macro LPM_R0_ZP
+#if __AVR_ENHANCED__
+ lpm r0, Z+
+#else
+ lpm
+ adiw r30,1
+#endif
+ .endm
+
--- /dev/null
+/*
+ * Copyright (c) 2002 Joerg Wunsch
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id: malloc.c,v 1.6 2003/01/08 11:14:10 joerg_wunsch Exp $
+ */
+
+#include <stdlib.h>
+
+#include <avr/io.h>
+
+#ifndef __AVR__
+
+/*
+ * When compiling this file natively on a host machine, it will
+ * include a main() that performs a regression test. This is meant as
+ * a debugging aid, where a normal source-level debugger will help to
+ * verify that the various allocator structures have the desired
+ * appearance at each stage.
+ *
+ * When cross-compiling with avr-gcc, it will compile into just the
+ * library functions malloc() and free().
+ */
+#define MALLOC_TEST
+
+#endif /* !__AVR__ */
+
+struct freelist {
+ size_t sz;
+ struct freelist *nx;
+};
+
+static char *brkval;
+static struct freelist *flp;
+
+#ifdef MALLOC_TEST
+
+#define malloc mymalloc
+#define free myfree
+#define __heap_start mymem
+#define __heap_end ((char *)0)
+
+char mymem[256];
+#define STACK_POINTER() (mymem + 256)
+
+#else /* !MALLOC_TEST */
+
+extern char __heap_start;
+extern char __heap_end;
+
+#define STACK_POINTER() ((char *)SP)
+
+#endif /* MALLOC_TEST */
+
+/*
+ * Exported interface:
+ *
+ * When extending the data segment, the allocator will not try to go
+ * beyond the current stack limit, decreased by __malloc_margin bytes.
+ * Thus, all possible stack frames of interrupt routines that could
+ * interrupt the current function, plus all further nested function
+ * calls must not require more stack space, or they'll risk to collide
+ * with the data segment.
+ */
+
+/* May be changed by the user only before the first malloc() call. */
+
+size_t __malloc_margin = 32;
+char *__malloc_heap_start = &__heap_start;
+char *__malloc_heap_end = &__heap_end;
+
+void *
+malloc(size_t len)
+{
+ struct freelist *fp1, *fp2;
+ char *cp;
+ size_t s;
+
+ /*
+ * Our minimum chunk size is the size of a pointer (plus the
+ * size of the "sz" field, but we don't need to account for
+ * this), otherwise we could not possibly fit a freelist entry
+ * into the chunk later.
+ */
+ if (len < sizeof(struct freelist) - sizeof(size_t))
+ len = sizeof(struct freelist) - sizeof(size_t);
+
+ /*
+ * First, walk the free list and try finding a chunk that
+ * would match exactly. If we found one, we are done. While
+ * walking, note down the size of the largest chunk we found
+ * that would still fit the request -- we need it for step 2.
+ *
+ */
+ for (s = 0, fp1 = flp, fp2 = 0;
+ fp1;
+ fp2 = fp1, fp1 = fp1->nx) {
+ if (fp1->sz == len) {
+ /*
+ * Found it. Disconnect the chunk from the
+ * freelist, and return it.
+ */
+ if (fp2)
+ fp2->nx = fp1->nx;
+ else
+ flp = fp1->nx;
+ return &(fp1->nx);
+ }
+ if (fp1->sz > len) {
+ if (s == 0 || fp1->sz < s)
+ s = fp1->sz;
+ }
+ }
+ /*
+ * Step 2: If we found a chunk on the freelist that would fit
+ * (but was too large), look it up again and use it, since it
+ * is our closest match now. Since the freelist entry needs
+ * to be split into two entries then, watch out that the
+ * difference between the requested size and the size of the
+ * chunk found is large enough for another freelist entry; if
+ * not, just enlarge the request size to what we have found,
+ * and use the entire chunk.
+ */
+ if (s) {
+ if (s - len < sizeof(struct freelist))
+ len = s;
+ for (fp1 = flp, fp2 = 0;
+ fp1;
+ fp2 = fp1, fp1 = fp1->nx) {
+ if (fp1->sz == s) {
+ if (len == s) {
+ /*
+ * Use entire chunk; same as
+ * above.
+ */
+ if (fp2)
+ fp2->nx = fp1->nx;
+ else
+ flp = fp1->nx;
+ return &(fp1->nx);
+ }
+ /*
+ * Split them up. Note that we leave
+ * the first part as the new (smaller)
+ * freelist entry, and return the
+ * upper portion to the caller. This
+ * saves us the work to fix up the
+ * freelist chain; we just need to
+ * fixup the size of the current
+ * entry, and note down the size of
+ * the new chunk before returning it
+ * to the caller.
+ */
+ cp = (char *)fp1;
+ s -= len;
+ cp += s;
+ fp2 = (struct freelist *)cp;
+ fp2->sz = len;
+ fp1->sz = s - sizeof(size_t);
+ return &(fp2->nx);
+ }
+ }
+ }
+ /*
+ * Step 3: If the request could not be satisfied from a
+ * freelist entry, just prepare a new chunk. This means we
+ * need to obtain more memory first. The largest address just
+ * not allocated so far is remembered in the brkval variable.
+ * Under Unix, the "break value" was the end of the data
+ * segment as dynamically requested from the operating system.
+ * Since we don't have an operating system, just make sure
+ * that we don't collide with the stack.
+ */
+ if (brkval == 0)
+ brkval = __malloc_heap_start;
+ cp = __malloc_heap_end;
+ if (cp == 0)
+ cp = STACK_POINTER() - __malloc_margin;
+ if (brkval + len + sizeof(size_t) < cp) {
+ fp1 = (struct freelist *)brkval;
+ brkval += len + sizeof(size_t);
+ fp1->sz = len;
+ return &(fp1->nx);
+ }
+ /*
+ * Step 4: There's no help, just fail. :-/
+ */
+ return 0;
+}
+
+void
+free(void *p)
+{
+ struct freelist *fp1, *fp2, *fpnew;
+ char *cp1, *cp2, *cpnew;
+
+ /* ISO C says free(NULL) must be a no-op */
+ if (p == 0)
+ return;
+
+ cpnew = p;
+ cpnew -= sizeof(size_t);
+ fpnew = (struct freelist *)cpnew;
+ fpnew->nx = 0;
+
+ /*
+ * Trivial case first: if there's no freelist yet, our entry
+ * will be the only one on it.
+ */
+ if (flp == 0) {
+ flp = fpnew;
+ return;
+ }
+
+ /*
+ * Now, find the position where our new entry belongs onto the
+ * freelist. Try to aggregate the chunk with adjacent chunks
+ * if possible.
+ */
+ for (fp1 = flp, fp2 = 0;
+ fp1;
+ fp2 = fp1, fp1 = fp1->nx) {
+ if (fp1 < fpnew)
+ continue;
+ cp1 = (char *)fp1;
+ fpnew->nx = fp1;
+ if ((char *)&(fpnew->nx) + fpnew->sz == cp1) {
+ /* upper chunk adjacent, assimilate it */
+ fpnew->sz += fp1->sz + sizeof(size_t);
+ fpnew->nx = fp1->nx;
+ }
+ if (fp2 == 0) {
+ /* new head of freelist */
+ flp = fpnew;
+ return;
+ }
+ break;
+ }
+ /*
+ * Note that we get here either if we hit the "break" above,
+ * or if we fell off the end of the loop. The latter means
+ * we've got a new topmost chunk. Either way, try aggregating
+ * with the lower chunk if possible.
+ */
+ fp2->nx = fpnew;
+ cp2 = (char *)&(fp2->nx);
+ if (cp2 + fp2->sz == cpnew) {
+ /* lower junk adjacent, merge */
+ fp2->sz += fpnew->sz + sizeof(size_t);
+ fp2->nx = fpnew->nx;
+ }
+}
+
+#ifdef MALLOC_TEST
+
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+
+void *handles[32];
+size_t sizes[32];
+
+
+void *
+alloc(size_t s)
+{
+ void *p;
+
+ if ((p = malloc(s)) == 0)
+ return 0;
+ memset(p, 0xd0, s);
+ return p;
+}
+
+void
+printfreelist(void)
+{
+ struct freelist *fp1;
+ int i;
+
+ if (!flp) {
+ printf("no free list\n");
+ return;
+ }
+
+ for (i = 0, fp1 = flp; fp1; i++, fp1 = fp1->nx) {
+ printf("entry %d @ %u: size %u, next ",
+ i, (char *)fp1 - mymem, fp1->sz);
+ if (fp1->nx)
+ printf("%u\n", (char *)fp1->nx - mymem);
+ else
+ printf("NULL\n");
+ }
+}
+
+int
+compare(const void *p1, const void *p2)
+{
+ return *((size_t *)p1) - *((size_t *)p2);
+}
+
+void
+printalloc(void)
+{
+ int i, j, k;
+ size_t sum, sum2;
+ void *sortedhandles[32];
+ struct freelist *fp;
+ char *cp;
+
+ for (i = j = k = sum = sum2 = 0;
+ i < sizeof handles / sizeof (void *);
+ i++)
+ if (sizes[i]) {
+ j++;
+ sum += sizes[i];
+ if (handles[i]) {
+ k++;
+ sum2 += sizes[i];
+ }
+ }
+ printf("brkval: %d, %d request%s => sum %u bytes "
+ "(actually %d reqs => %u bytes)\n",
+ (char *)brkval - mymem, j, j == 1? "": "s", sum, k, sum2);
+ memcpy(sortedhandles, handles, sizeof sortedhandles);
+ qsort(sortedhandles, 32, sizeof(void *), compare);
+ for (i = j = 0; i < sizeof sortedhandles / sizeof (void *); i++)
+ if ((cp = sortedhandles[i])) {
+ cp -= sizeof(size_t);
+ fp = (struct freelist *)cp;
+ printf("block %d @ %u: %u bytes\n",
+ j, (char *)&fp->nx - mymem, fp->sz);
+ j++;
+ }
+
+}
+
+
+int
+main(void)
+{
+ int i, j, k, l, m, om, p, f;
+ size_t s;
+
+ srand(time(0) ^ getpid());
+
+ for (k = 0; k < 100; k++) {
+ memset(handles, 0, sizeof handles);
+ memset(sizes, 0, sizeof sizes);
+
+ j = rand() % 16 + 15;
+ l = rand() % 80 + 7;
+
+ for (i = s = 0; i < j && s < 256; i++) {
+ sizes[i] = rand() % l + 1;
+ s += sizes[i];
+ }
+ j = i;
+ for (m = om = 1, p = 1, f = 0; m < 1000; m++) {
+ for (i = s = 0; i < j; i++)
+ if (handles[i])
+ s++;
+ if (s == j)
+ break;
+
+ if (m / om > 10) {
+ p <<= 1;
+ p |= 1;
+ }
+
+ for (i = 0; i < j; i++)
+ if (rand() & p) {
+ if (!handles[i] &&
+ (handles[i] = alloc(sizes[i])) == 0)
+ f++;
+ }
+ for (i = 0; i < j; i++)
+ if (rand() & 1) {
+ free(handles[i]);
+ handles[i] = 0;
+ }
+ }
+ if (f)
+ printf("%d alloc failure%s total\n",
+ f, f == 1? "": "s");
+ printf("After alloc:\n");
+ printalloc();
+ printfreelist();
+ for (i = 0; i < j; i++)
+ free(handles[i]);
+ printf("After cleanup:\n");
+ printfreelist();
+ }
+
+ return 0;
+}
+
+#endif /* MALLOC_TEST */
+
--- /dev/null
+ .file "malloc.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+.global __malloc_margin\r
+ .data\r
+ .type __malloc_margin, @object\r
+ .size __malloc_margin, 2\r
+__malloc_margin:\r
+ .word 32\r
+.global __malloc_heap_start\r
+ .type __malloc_heap_start, @object\r
+ .size __malloc_heap_start, 2\r
+__malloc_heap_start:\r
+ .word __heap_start\r
+.global __malloc_heap_end\r
+ .type __malloc_heap_end, @object\r
+ .size __malloc_heap_end, 2\r
+__malloc_heap_end:\r
+ .word __heap_end\r
+ .text\r
+.global malloc\r
+ .type malloc, @function\r
+malloc:\r
+/* prologue: frame size=14 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ cpi r24,2\r
+ cpc r25,__zero_reg__\r
+ brsh .L7\r
+ ldi r24,lo8(2)\r
+ ldi r25,hi8(2)\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+.L7:\r
+ std Y+9,__zero_reg__\r
+ std Y+10,__zero_reg__\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ std Y+5,__zero_reg__\r
+ std Y+6,__zero_reg__\r
+.L8:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L11\r
+ rjmp .L9\r
+.L11:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L12\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ breq .L13\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r26,Y+3\r
+ ldd r27,Y+4\r
+ mov r31,r27\r
+ mov r30,r26\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ ldd r30,Y+13\r
+ ldd r31,Y+14\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ rjmp .L14\r
+.L13:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+.L14:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L12:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ cp r24,r18\r
+ cpc r25,r19\r
+ brsh .L10\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ sbiw r24,0\r
+ breq .L17\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brlo .L17\r
+ rjmp .L10\r
+.L17:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r24,Z\r
+ ldd r25,Z+1\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+.L10:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ rjmp .L8\r
+.L9:\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ sbiw r24,0\r
+ brne .+2\r
+ rjmp .L18\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ ldd r18,Y+1\r
+ ldd r19,Y+2\r
+ sub r24,r18\r
+ sbc r25,r19\r
+ cpi r24,4\r
+ cpc r25,__zero_reg__\r
+ brsh .L19\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+.L19:\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ std Y+5,__zero_reg__\r
+ std Y+6,__zero_reg__\r
+.L20:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L23\r
+ rjmp .L18\r
+.L23:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ breq .+2\r
+ rjmp .L22\r
+ ldd r18,Y+1\r
+ ldd r19,Y+2\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ breq .L26\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r26,Y+3\r
+ ldd r27,Y+4\r
+ mov r31,r27\r
+ mov r30,r26\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ ldd r30,Y+13\r
+ ldd r31,Y+14\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ rjmp .L27\r
+.L26:\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+.L27:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L25:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r18,Y+9\r
+ ldd r19,Y+10\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sub r18,r24\r
+ sbc r19,r25\r
+ mov r25,r19\r
+ mov r24,r18\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+ ldd r18,Y+7\r
+ ldd r19,Y+8\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ add r24,r18\r
+ adc r25,r19\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ sbiw r24,2\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L22:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ rjmp .L20\r
+.L18:\r
+ lds r24,brkval\r
+ lds r25,(brkval)+1\r
+ sbiw r24,0\r
+ brne .L28\r
+ lds r24,__malloc_heap_start\r
+ lds r25,(__malloc_heap_start)+1\r
+ sts (brkval)+1,r25\r
+ sts brkval,r24\r
+.L28:\r
+ lds r24,__malloc_heap_end\r
+ lds r25,(__malloc_heap_end)+1\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sbiw r24,0\r
+ brne .L29\r
+ lds r24,93\r
+ mov r18,r24\r
+ clr r19\r
+ lds r24,__malloc_margin\r
+ lds r25,(__malloc_margin)+1\r
+ sub r18,r24\r
+ sbc r19,r25\r
+ mov r25,r19\r
+ mov r24,r18\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+.L29:\r
+ lds r18,brkval\r
+ lds r19,(brkval)+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ add r24,r18\r
+ adc r25,r19\r
+ mov r18,r24\r
+ mov r19,r25\r
+ subi r18,lo8(-(2))\r
+ sbci r19,hi8(-(2))\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brsh .L30\r
+ lds r24,brkval\r
+ lds r25,(brkval)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ lds r18,brkval\r
+ lds r19,(brkval)+1\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ add r24,r18\r
+ adc r25,r19\r
+ adiw r24,2\r
+ sts (brkval)+1,r25\r
+ sts brkval,r24\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ rjmp .L6\r
+.L30:\r
+ std Y+11,__zero_reg__\r
+ std Y+12,__zero_reg__\r
+.L6:\r
+ ldd r24,Y+11\r
+ ldd r25,Y+12\r
+/* epilogue: frame size=14 */\r
+ adiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function malloc size 354 (335) */\r
+ .size malloc, .-malloc\r
+.global free\r
+ .type free, @function\r
+free:\r
+/* prologue: frame size=14 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ sbiw r24,0\r
+ brne .L32\r
+ rjmp .L31\r
+.L32:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r24,Y+13\r
+ ldd r25,Y+14\r
+ sbiw r24,2\r
+ std Y+13,r24\r
+ std Y+14,r25\r
+ ldd r24,Y+13\r
+ ldd r25,Y+14\r
+ std Y+7,r24\r
+ std Y+8,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ std Z+2,__zero_reg__\r
+ std Z+3,__zero_reg__\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ sbiw r24,0\r
+ brne .L33\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+ rjmp .L31\r
+.L33:\r
+ lds r24,flp\r
+ lds r25,(flp)+1\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ std Y+5,__zero_reg__\r
+ std Y+6,__zero_reg__\r
+.L34:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ sbiw r24,0\r
+ brne .L37\r
+ rjmp .L35\r
+.L37:\r
+ ldd r18,Y+3\r
+ ldd r19,Y+4\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brsh .L38\r
+ rjmp .L36\r
+.L38:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+9,r24\r
+ std Y+10,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r18,Y+7\r
+ ldd r19,Y+8\r
+ ld r24,Z\r
+ ldd r25,Z+1\r
+ add r24,r18\r
+ adc r25,r19\r
+ mov r18,r24\r
+ mov r19,r25\r
+ subi r18,lo8(-(2))\r
+ sbci r19,hi8(-(2))\r
+ ldd r24,Y+9\r
+ ldd r25,Y+10\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L39\r
+ ldd r20,Y+7\r
+ ldd r21,Y+8\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r26,Y+3\r
+ ldd r27,Y+4\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ld r24,X+\r
+ ld r25,X\r
+ add r24,r18\r
+ adc r25,r19\r
+ adiw r24,2\r
+ mov r31,r21\r
+ mov r30,r20\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r26,Y+7\r
+ ldd r27,Y+8\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ mov r31,r27\r
+ mov r30,r26\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+.L39:\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ sbiw r24,0\r
+ brne .L35\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ sts (flp)+1,r25\r
+ sts flp,r24\r
+ rjmp .L31\r
+.L36:\r
+ ldd r24,Y+3\r
+ ldd r25,Y+4\r
+ std Y+5,r24\r
+ std Y+6,r25\r
+ ldd r30,Y+3\r
+ ldd r31,Y+4\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ std Y+3,r24\r
+ std Y+4,r25\r
+ rjmp .L34\r
+.L35:\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r24,Y+7\r
+ ldd r25,Y+8\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+ ldd r24,Y+5\r
+ ldd r25,Y+6\r
+ adiw r24,2\r
+ std Y+11,r24\r
+ std Y+12,r25\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r18,Y+11\r
+ ldd r19,Y+12\r
+ ld r24,Z\r
+ ldd r25,Z+1\r
+ add r18,r24\r
+ adc r19,r25\r
+ ldd r24,Y+13\r
+ ldd r25,Y+14\r
+ cp r18,r24\r
+ cpc r19,r25\r
+ brne .L31\r
+ ldd r20,Y+5\r
+ ldd r21,Y+6\r
+ ldd r30,Y+5\r
+ ldd r31,Y+6\r
+ ldd r26,Y+7\r
+ ldd r27,Y+8\r
+ ld r18,Z\r
+ ldd r19,Z+1\r
+ ld r24,X+\r
+ ld r25,X\r
+ add r24,r18\r
+ adc r25,r19\r
+ adiw r24,2\r
+ mov r31,r21\r
+ mov r30,r20\r
+ st Z,r24\r
+ std Z+1,r25\r
+ ldd r26,Y+5\r
+ ldd r27,Y+6\r
+ ldd r30,Y+7\r
+ ldd r31,Y+8\r
+ ldd r24,Z+2\r
+ ldd r25,Z+3\r
+ mov r31,r27\r
+ mov r30,r26\r
+ std Z+2,r24\r
+ std Z+3,r25\r
+.L31:\r
+/* epilogue: frame size=14 */\r
+ adiw r28,14\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function free size 204 (185) */\r
+ .size free, .-free\r
+ .lcomm brkval,2\r
+ .lcomm flp,2\r
+/* File "malloc.c": code 558 = 0x022e ( 520), prologues 20, epilogues 18 */\r
--- /dev/null
+/* Copyright (c) 2002, Marek Michalkiewicz
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+#include "macros.inc"
+
+#define dest_hi r25
+#define dest_lo r24
+; #define val_hi r23
+#define val_lo r22
+#define len_hi r21
+#define len_lo r20
+
+/** \ingroup avr_string
+ \fn void *memset(void *dest, int val, size_t len)
+ \brief Fill memory with a constant byte.
+
+ The memset() function fills the first len bytes of the memory area pointed
+ to by dest with the constant byte val.
+
+ \returns The memset() function returns a pointer to the memory area dest. */
+
+ .text
+ .global _U(memset)
+ .type _U(memset), @function
+_U(memset):
+ LOAD_X(dest_lo, dest_hi)
+#if OPTIMIZE_SPEED
+; 11 words, (12 + len * 4 - (len & 1)) cycles
+ sbrs len_lo, 0
+ rjmp .memset_start
+ rjmp .memset_odd
+.memset_loop:
+ st X+, val_lo
+.memset_odd:
+ st X+, val_lo
+.memset_start:
+ subi len_lo, lo8(2)
+ sbci len_hi, hi8(2)
+#else
+; 8 words, (11 + len * 6) cycles
+ rjmp .memset_start
+.memset_loop:
+ st X+, val_lo
+.memset_start:
+ subi len_lo, lo8(1)
+ sbci len_hi, hi8(1)
+#endif
+ brcc .memset_loop
+; return dest (unchanged)
+ ret
+.memset_end:
+ .size _U(memset), .memset_end - _U(memset)
+
--- /dev/null
+# 1 "memset.S"\r
+# 1 "<built-in>"\r
+# 1 "<command line>"\r
+# 1 "memset.S"\r
+# 29 "memset.S"\r
+# 1 "macros.inc" 1\r
+# 33 "macros.inc"\r
+# 1 "c:/WinAVR/avr/include/avr/io.h" 1 3\r
+# 81 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/sfr_defs.h" 1 3\r
+# 82 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 197 "c:/WinAVR/avr/include/avr/io.h" 3\r
+# 1 "c:/WinAVR/avr/include/avr/io4433.h" 1 3\r
+# 198 "c:/WinAVR/avr/include/avr/io.h" 2 3\r
+# 34 "macros.inc" 2\r
+# 124 "macros.inc"\r
+ .macro X_movw dest src\r
+ .if ((\src) - (\dest))\r
+ .if (((\src) | (\dest)) & 0x01)\r
+ .if (((\src)-(\dest)) & 0x80)\r
+ mov (\dest)+1, (\src)+1\r
+ mov (\dest), (\src)\r
+ .else\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+ .endif\r
+ .else\r
+\r
+\r
+\r
+ mov (\dest), (\src)\r
+ mov (\dest)+1, (\src)+1\r
+\r
+ .endif\r
+ .endif\r
+ .endm\r
+# 176 "macros.inc"\r
+ .macro LPM_R0_ZPLUS_INIT hhi\r
+\r
+\r
+\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZPLUS_NEXT hhi\r
+# 202 "macros.inc"\r
+ lpm\r
+ adiw r30,1\r
+\r
+\r
+ .endm\r
+\r
+ .macro LPM_R0_ZP\r
+\r
+\r
+\r
+ lpm\r
+ adiw r30,1\r
+\r
+ .endm\r
+# 30 "memset.S" 2\r
+\r
+\r
+\r
+; #define val_hi r23\r
+# 47 "memset.S"\r
+ .text\r
+ .global memset\r
+ .type memset, @function\r
+memset:\r
+ mov r26, r24 $ mov r27, r25\r
+# 65 "memset.S"\r
+; 8 words, (11 + len * 6) cycles\r
+ rjmp .memset_start\r
+.memset_loop:\r
+ st X+, r22\r
+.memset_start:\r
+ subi r20, lo8(1)\r
+ sbci r21, hi8(1)\r
+\r
+ brcc .memset_loop\r
+; return dest (unchanged)\r
+ ret\r
+.memset_end:\r
+ .size memset, .memset_end - memset\r
--- /dev/null
+/* Copyright (c) 2002, Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* $Id: stdio_private.h,v 1.6 2003/01/07 22:17:24 joerg_wunsch Exp $ */
+
+#include <inttypes.h>
+#include <stdio.h>
+
+struct __file {
+ char *buf; /* buffer pointer */
+ unsigned char unget; /* ungetc() buffer */
+ uint8_t flags; /* flags, see below */
+#define __SRD 0x0001 /* OK to read */
+#define __SWR 0x0002 /* OK to write */
+#define __SSTR 0x0004 /* this is an sprintf/snprintf string */
+#define __SPGM 0x0008 /* fmt string is in progmem */
+#define __SERR 0x0010 /* found error */
+#define __SEOF 0x0020 /* found EOF */
+#define __SUNGET 0x040 /* ungetc() happened */
+#if 0
+/* possible future extensions, will require uint16_t flags */
+#define __SRW 0x0080 /* open for reading & writing */
+#define __SLBF 0x0100 /* line buffered */
+#define __SNBF 0x0200 /* unbuffered */
+#define __SMBF 0x0400 /* buf is from malloc */
+#endif
+ int size; /* size of buffer */
+ int len; /* characters read or written so far */
+ int (*put)(char); /* function to write one char to device */
+ int (*get)(void); /* function to read one char from device */
+};
+
+/* values for PRINTF_LEVEL */
+#define PRINTF_MIN 1
+#define PRINTF_STD 2
+#define PRINTF_FLT 3
+
+/* values for SCANF_LEVEL */
+#define SCANF_MIN 1
+#define SCANF_STD 2
+#define SCANF_FLT 3
--- /dev/null
+# Simple Makefile\r
+# Volker Oth (c) 1999\r
+\r
+\r
+########### change this lines according to your project ##################\r
+\r
+#put the name of the target mcu here (at90s8515, at90s8535, attiny22, atmega603 etc.)\r
+ MCU = at90s4433\r
+\r
+#put the name of the target file here (without extension)\r
+ TRG = hello\r
+\r
+#put your C sourcefiles here \r
+# SRC = uart.c $(TRG).c\r
+ SRC = $(TRG).c\r
+\r
+#put additional assembler source file here\r
+ ASRC =\r
+\r
+#additional libraries and object files to link\r
+ LIB = \r
+\r
+#additional includes to compile\r
+ INC = \r
+\r
+#compiler flags\r
+# CPFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+ CPFLAGS = -g -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+\r
+#linker flags\r
+ LDFLAGS = -Wl,-Map=$(TRG).map,--cref\r
+\r
+########### you should not need to change the following line #############\r
+include avr_make\r
+ \r
+###### dependecies, add any dependencies you need here ###################\r
+\r
+#uart.o : uart.c uart.h\r
+$(TRG).o : $(TRG).c\r
--- /dev/null
+# Simple Makefile\r
+# Volker Oth (c) 1999\r
+\r
+\r
+########### change this lines according to your project ##################\r
+\r
+#put the name of the target mcu here (at90s8515, at90s8535, attiny22, atmega603 etc.)\r
+ MCU = at90s4433\r
+\r
+#put the name of the target file here (without extension)\r
+ TRG = hello\r
+\r
+#put your C sourcefiles here \r
+# SRC = uart.c $(TRG).c\r
+ SRC = $(TRG).c\r
+\r
+#put additional assembler source file here\r
+ ASRC =\r
+\r
+#additional libraries and object files to link\r
+ LIB = \r
+\r
+#additional includes to compile\r
+ INC = \r
+\r
+#compiler flags\r
+# CPFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+ CPFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+\r
+#linker flags\r
+ LDFLAGS = -Wl,-Map=$(TRG).map,--cref\r
+\r
+########### you should not need to change the following line #############\r
+include avr_make\r
+ \r
+###### dependecies, add any dependencies you need here ###################\r
+\r
+#uart.o : uart.c uart.h\r
+$(TRG).o : $(TRG).c\r
--- /dev/null
+avr-gcc -mmcu=at90s4433 -Wa,-a=nick -Wl,--oformat,ihex,-M hello.c -o hello.hex > hello.map
+copy hello.hex a:\
--- /dev/null
+#!/bin/sh
+avr-gcc -mmcu=at90s4433 -Wl,--oformat,ihex hello.c -o hello.hex
--- /dev/null
+GAS LISTING C:\cygwin\tmp/ccmeaaaa.s page 1\r
+\r
+\r
+ 1 .file "gcctest7.c"\r
+ 2 .arch at90s4433\r
+ 3 __SREG__ = 0x3f\r
+ 4 __SP_H__ = 0x3e\r
+ 5 __SP_L__ = 0x3d\r
+ 6 __tmp_reg__ = 0\r
+ 7 __zero_reg__ = 1\r
+ 8 .global __do_copy_data\r
+ 9 .global __do_clear_bss\r
+ 10 .section .progmem.data,"a",@progbits\r
+ 11 .type __c.0, @object\r
+ 12 .size __c.0, 14\r
+ 13 __c.0:\r
+ 14 0000 4865 6C6C .string "Hello World !"\r
+ 14 6F20 576F \r
+ 14 726C 6420 \r
+ 14 2100 \r
+ 15 .type __c.1, @object\r
+ 16 .size __c.1, 17\r
+ 17 __c.1:\r
+ 18 000e 5072 6573 .string "Press any key..."\r
+ 18 7320 616E \r
+ 18 7920 6B65 \r
+ 18 792E 2E2E \r
+ 18 00\r
+ 19 .type __c.2, @object\r
+ 20 .size __c.2, 14\r
+ 21 __c.2:\r
+ 22 001f 596F 7520 .string "You pressed '"\r
+ 22 7072 6573 \r
+ 22 7365 6420 \r
+ 22 2700 \r
+ 23 .type __c.3, @object\r
+ 24 .size __c.3, 14\r
+ 25 __c.3:\r
+ 26 002d 2720 7768 .string "' which is 0x"\r
+ 26 6963 6820 \r
+ 26 6973 2030 \r
+ 26 7800 \r
+ 27 .type __c.4, @object\r
+ 28 .size __c.4, 17\r
+ 29 __c.4:\r
+ 30 003b 2069 6E20 .string " in hexadecimal."\r
+ 30 6865 7861 \r
+ 30 6465 6369 \r
+ 30 6D61 6C2E \r
+ 30 00\r
+ 31 .text\r
+ 32 .global main\r
+ 33 .type main, @function\r
+ 34 main:\r
+ 35 /* prologue: frame size=1 */\r
+ 36 0000 C0E0 ldi r28,lo8(__stack - 1)\r
+ 37 0002 D0E0 ldi r29,hi8(__stack - 1)\r
+ 38 0004 DEBF out __SP_H__,r29\r
+ 39 0006 CDBF out __SP_L__,r28\r
+ 40 /* prologue end (size=4) */\r
+\fGAS LISTING C:\cygwin\tmp/ccmeaaaa.s page 2\r
+\r
+\r
+ 41 0008 00D0 rcall UART_Init\r
+ 42 000a 80E0 ldi r24,lo8(__c.0)\r
+ 43 000c 90E0 ldi r25,hi8(__c.0)\r
+ 44 000e 00D0 rcall UART_PrintfProgStr\r
+ 45 0010 00D0 rcall UART_PrintfEndOfLine\r
+ 46 .L3:\r
+ 47 0012 80E0 ldi r24,lo8(__c.1)\r
+ 48 0014 90E0 ldi r25,hi8(__c.1)\r
+ 49 0016 00D0 rcall UART_PrintfProgStr\r
+ 50 0018 00D0 rcall UART_PrintfEndOfLine\r
+ 51 001a 00D0 rcall UART_ReceiveByte\r
+ 52 001c 8983 std Y+1,r24\r
+ 53 001e 80E0 ldi r24,lo8(__c.2)\r
+ 54 0020 90E0 ldi r25,hi8(__c.2)\r
+ 55 0022 00D0 rcall UART_PrintfProgStr\r
+ 56 0024 8981 ldd r24,Y+1\r
+ 57 0026 00D0 rcall UART_SendByte\r
+ 58 0028 80E0 ldi r24,lo8(__c.3)\r
+ 59 002a 90E0 ldi r25,hi8(__c.3)\r
+ 60 002c 00D0 rcall UART_PrintfProgStr\r
+ 61 002e 8981 ldd r24,Y+1\r
+ 62 0030 00D0 rcall UART_Printfu08\r
+ 63 0032 80E0 ldi r24,lo8(__c.4)\r
+ 64 0034 90E0 ldi r25,hi8(__c.4)\r
+ 65 0036 00D0 rcall UART_PrintfProgStr\r
+ 66 0038 00D0 rcall UART_PrintfEndOfLine\r
+ 67 003a EBCF rjmp .L3\r
+ 68 /* epilogue: frame size=1 */\r
+ 69 /* epilogue: noreturn */\r
+ 70 /* epilogue end (size=0) */\r
+ 71 /* function main size 30 (26) */\r
+ 72 .size main, .-main\r
+ 73 /* File "gcctest7.c": code 30 = 0x001e ( 26), prologues 4, epilogues 0 */\r
+\fGAS LISTING C:\cygwin\tmp/ccmeaaaa.s page 3\r
+\r
+\r
+DEFINED SYMBOLS\r
+ *ABS*:00000000 gcctest7.c\r
+ *ABS*:0000003f __SREG__\r
+ *ABS*:0000003e __SP_H__\r
+ *ABS*:0000003d __SP_L__\r
+ *ABS*:00000000 __tmp_reg__\r
+ *ABS*:00000001 __zero_reg__\r
+C:\cygwin\tmp/ccmeaaaa.s:13 .progmem.data:00000000 __c.0\r
+C:\cygwin\tmp/ccmeaaaa.s:17 .progmem.data:0000000e __c.1\r
+C:\cygwin\tmp/ccmeaaaa.s:21 .progmem.data:0000001f __c.2\r
+C:\cygwin\tmp/ccmeaaaa.s:25 .progmem.data:0000002d __c.3\r
+C:\cygwin\tmp/ccmeaaaa.s:29 .progmem.data:0000003b __c.4\r
+C:\cygwin\tmp/ccmeaaaa.s:34 .text:00000000 main\r
+\r
+UNDEFINED SYMBOLS\r
+__do_copy_data\r
+__do_clear_bss\r
+__stack\r
+UART_Init\r
+UART_PrintfProgStr\r
+UART_PrintfEndOfLine\r
+UART_ReceiveByte\r
+UART_SendByte\r
+UART_Printfu08\r
--- /dev/null
+#arch AT90S8515
+#include "avr.inc"
+
+ seg abs=0x0 flash.code0
+
+ add r12, r16 ; 0000
+ eor r12, r16 ; 0002
+ eor r28, r0 ; 0004
+ eor r12, r0 ; 0006
+ and r28, r16 ; 0008
+ and r12, r16 ; 000A
+ and r28, r0 ; 000C
+ and r12, r0 ; 000E
+ adc r28, r16 ; 0010
+ adc r12, r16 ; 0012
+ adc r28, r0 ; 0014
+ adc r12, r0 ; 0016
+ sub r28, r16 ; 0018
+ sub r12, r16 ; 001A
+ cpse r18, r4 ; 001C
+ adc r27, r30 ; 001E
+ rjmp -38 ; 0020, Dest: FFFFFFFC
+ rjmp -1154 ; 0022, Dest: FFFFFBA2
+ cpse r6, r0 ; 0024
+ dc.W 0x00E1 ; 0026
+ in r6, 0x0 ; 0028
+ or r14, r2 ; 002A
+
+ brbs 0, 120 ; 002C, Dest: 00A6
+ ;brcs 120 ; 002C, Dest: 00A6
+ ;brlo 120 ; 002C, Dest: 00A6
+
+ dc.W 0x03C0 ; 002E
+ rjmp -3798 ; 0030, Dest: FFFFF15C
+ cpi r25, 0x16 ; 0032
+ add r25, r2 ; 0034
+ dc.W 0x0231 ; 0036
+ in r16, 0x7 ; 0038
+ rcall 1006 ; 003A, Dest: 042A
+ cpse r6, r0 ; 003C
+ dc.W 0x02E1 ; 003E
+ in r6, 0x0 ; 0040
+ dc.W 0x01C0 ; 0042
+ adc r25, r2 ; 0044
+ dc.W 0x0231 ; 0046
+ in r16, 0x7 ; 0048
+ ldi r31, 0x17 ; 004A
+
+ ori r28, 0xB0 ; 004C
+ ;sbr r28, 0xB0 ; 004C
+
+ rcall -3170 ; 004E, Dest: FFFFF3EE
+ rjmp -218 ; 0050, Dest: FFFFFF78
+ rcall -218 ; 0052, Dest: FFFFFF7A
+ rjmp -1170 ; 0054, Dest: FFFFFBC4
+ rcall -658 ; 0056, Dest: FFFFFDC6
+ and r25, r23 ; 0058
+ add r27, r22 ; 005A
+ bld r9, 4 ; 005C
+ rcall -642 ; 005E, Dest: FFFFFDDE
+ add r27, r30 ; 0060
+ rjmp -1154 ; 0062, Dest: FFFFFBE2
+ ldd r24, Z+19 ; 0064
+ sbi 0x10, 3 ; 0066
+ ldd r24, Z+17 ; 0068
+ sbi 0x10, 1 ; 006A
+ dc.W 0xF92F ; 006C
+ ldi r18, 0x8F ; 006E
+ and r8, r1 ; 0070
+ or r24, r19 ; 0072
+ dc.W 0x0196 ; 0074
+ ldd r24, Z+19 ; 0076
+ sbi 0x10, 3 ; 0078
+ and r2, r19 ; 007A
+ sbc r31, r4 ; 007C
+ dc.W 0x03C0 ; 007E
+ std Z+17, r24 ; 0080
+ add r13, r0 ; 0082
+
+ brbs 7, 114 ; 0084, Dest: 00F8
+ ;brie 114 ; 0084, Dest: 00F8
+
+ ld r14, Z ; 0086
+ ;ldd r14, Z+0 ; 0086
+
+ lds r14, 0x2396 ; 0088
+ add r27, r22 ; 008C
+ bld r9, 4 ; 008E
+ rcall -642 ; 0090, Dest: FFFFFE10
+ add r27, r30 ; 0092
+ rjmp -1154 ; 0094, Dest: FFFFFC14
+ rcall -222 ; 0096, Dest: FFFFFFBA
+ rjmp -222 ; 0098, Dest: FFFFFFBC
+ sbc r9, r5 ; 009A
+ rjmp -218 ; 009C, Dest: FFFFFFC4
+ rcall -218 ; 009E, Dest: FFFFFFC6
+ rjmp -1170 ; 00A0, Dest: FFFFFC10
+ rcall -658 ; 00A2, Dest: FFFFFE12
+ and r25, r7 ; 00A4
+ add r27, r22 ; 00A6
+ bld r9, 4 ; 00A8
+ rcall -642 ; 00AA, Dest: FFFFFE2A
+ add r27, r30 ; 00AC
+ rjmp -1154 ; 00AE, Dest: FFFFFC2E
+ ldd r24, Z+19 ; 00B0
+ ldd r9, Z+1 ; 00B2
+ or r16, r16 ; 00B4
+ sbic 0x4, 7 ; 00B6
+ ldd r7, Z+2 ; 00B8
+ lds r7, 0x0097 ; 00BA
+ rjmp -3098 ; 00BE, Dest: FFFFF4A6
+ ldd r24, Z+17 ; 00C0
+ ldd r9, Z+3 ; 00C2
+ mov r0, r0 ; 00C4
+
+ ld r14, Z ; 00C6
+ ;ldd r14, Z+0 ; 00C6
+
+ lds r14, 0x2196 ; 00C8
+ add r27, r22 ; 00CC
+ bld r9, 4 ; 00CE
+ rcall -642 ; 00D0, Dest: FFFFFE50
+ add r27, r30 ; 00D2
+ rjmp -1154 ; 00D4, Dest: FFFFFC54
+ rcall -222 ; 00D6, Dest: FFFFFFFA
+ rjmp -222 ; 00D8, Dest: FFFFFFFC
+ sbc r9, r5 ; 00DA
+ rjmp -218 ; 00DC, Dest: 0004
+ rcall -218 ; 00DE, Dest: 0006
+ rjmp -1170 ; 00E0, Dest: FFFFFC50
+ rcall -658 ; 00E2, Dest: FFFFFE52
+ and r9, r23 ; 00E4
+ add r27, r22 ; 00E6
+ bld r9, 4 ; 00E8
+ rcall -642 ; 00EA, Dest: FFFFFE6A
+ add r27, r30 ; 00EC
+ rjmp -1154 ; 00EE, Dest: FFFFFC6E
+ ldd r9, Z+1 ; 00F0
+ or r16, r16 ; 00F2
+ ldd r2, Z+19 ; 00F4
+ mov r15, r0 ; 00F6
+ std Y+31, r30 ; 00F8
+ dc.W 0x9FEF ; 00FA
+ ldd r24, Z+19 ; 00FC
+ sbi 0x10, 3 ; 00FE
+ cpc r28, r0 ; 0100
+ ldd r9, Z+1 ; 0102
+ mov r0, r0 ; 0104
+ sbic 0x4, 7 ; 0106
+ ldd r24, Z+19 ; 0108
+ sbi 0x10, 3 ; 010A
+ ldd r24, Z+17 ; 010C
+ sbi 0x10, 1 ; 010E
+ and r9, r22 ; 0110
+ add r27, r22 ; 0112
+ bld r9, 4 ; 0114
+ rcall -642 ; 0116, Dest: FFFFFE96
+ add r27, r30 ; 0118
+ rjmp -1154 ; 011A, Dest: FFFFFC9A
+ rcall -222 ; 011C, Dest: 0040
+ rjmp -222 ; 011E, Dest: 0042
+ sbc r9, r5 ; 0120
+ dc.W 0x9FE1 ; 0122
+ rcall 448 ; 0124, Dest: 02E6
+ rcall -642 ; 0126, Dest: FFFFFEA6
+ rjmp -1154 ; 0128, Dest: FFFFFCA8
+
+ andi r29, 0xDF ; 012A
+ ;cbr r29, 0xDF ; 012A
+
+ ldd r13, Y+23 ; 012C
+ ldd r14, Z+4 ; 012E
+ ldd r9, Z+3 ; 0130
+ or r16, r16 ; 0132
+ ldd r14, Z+17 ; 0134
+ ldd r9, Z+3 ; 0136
+ or r0, r16 ; 0138
+ std Z+12, r30 ; 013A
+ ldd r9, Z+3 ; 013C
+ or r16, r0 ; 013E
+ ldi r30, 0x0 ; 0140
+ lds r6, 0x85DF ; 0142
+ dc.W 0xFFCF ; 0146
+
+ ori r16, 0x10 ; 0148
+ ;sbr r16, 0x10 ; 0148
+
--- /dev/null
+revava -e hello.hex -o hello.s
--- /dev/null
+revava -e hello.hex -o hello.s
--- /dev/null
+avr-gcc -mmcu=at90s4433 -S hello.c
--- /dev/null
+# GCC-AVR standard makefile\r
+# Based on AVRfreaks.net January 2000 sample makefile\r
+# For compilation under Microsoft Windows environment\r
+\r
+# Variables definitions\r
+ CC = avr-gcc\r
+ AS = avr-gcc -x assembler-with-cpp \r
+ RM = rm -f\r
+ RN = mv\r
+ BIN = avr-objcopy\r
+ SIZE = avr-size\r
+ INCDIR = .\r
+ LIBDIR = avr/lib\r
+ SHELL = sh.exe\r
+\r
+# Output format (srec or ihex, avrobj is always created)\r
+ FORMAT = ihex \r
+\r
+# Project specific object files\r
+ OBJ = $(ASRC:.s=.o) $(SRC:.c=.o) \r
+ CPFLAGS += -mmcu=$(MCU)\r
+ ASFLAGS += -mmcu=$(MCU)\r
+ LDFLAGS += -mmcu=$(MCU)\r
+ \r
+# Define make process\r
+\r
+all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok \r
+%.o : %.c \r
+ $(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.s : %.c\r
+ $(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.o : %.s\r
+ $(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@\r
+%.elf: $(OBJ)\r
+ $(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@\r
+%.obj: %.elf\r
+ $(BIN) -O avrobj -R .eeprom $< $@\r
+%.rom: %.elf\r
+ $(BIN) -O $(FORMAT) -R .eeprom $< $@\r
+%.eep: %.elf\r
+ $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+\r
+# No error message if successfully compiled\r
+%ok:\r
+ @echo "Errors: none" \r
+\r
+# Clean up directory\r
+clean:\r
+ $(RM) $(OBJ)\r
+ $(RM) $(SRC:.c=.s)\r
+ $(RM) $(SRC:.c=.lst)\r
+ $(RM) $(TRG).map\r
+ $(RM) $(TRG).elf\r
+\r
+ $(RM) $(TRG).obj\r
+ $(RM) $(TRG).a90\r
+ $(RM) $(TRG).hex \r
+ $(RM) *.bak\r
+ $(RM) *.log\r
+ \r
+size:\r
+ $(SIZE) $(TRG).elf\r
+ \r
--- /dev/null
+# GCC-AVR standard makefile\r
+# Based on AVRfreaks.net January 2000 sample makefile\r
+# For compilation under Microsoft Windows environment\r
+# Modified for compilation under another drive different than $(AVR)
+\r
+# Variables definitions\r
+ CC = $(AVR)/bin/avr-gcc\r
+ AS = $(AVR)/bin/avr-gcc -x assembler-with-cpp \r
+ RM = $(AVR)/bin/rm -f\r
+ RN = $(AVR)/bin/mv\r
+ BIN = $(AVR)/bin/avr-objcopy\r
+ SIZE = $(AVR)/bin/avr-size\r
+ INCDIR = .\r
+ LIBDIR = $(AVR)/avr/lib\r
+ SHELL = $(AVR)/bin/sh.exe\r
+\r
+# Output format (srec or ihex, avrobj is always created)\r
+ FORMAT = ihex \r
+\r
+# Project specific object files\r
+ OBJ = $(ASRC:.s=.o) $(SRC:.c=.o) \r
+ CPFLAGS += -mmcu=$(MCU)\r
+ ASFLAGS += -mmcu=$(MCU)\r
+ LDFLAGS += -mmcu=$(MCU)\r
+ \r
+# Define make process\r
+\r
+all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok \r
+%.o : %.c \r
+ $(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.s : %.c\r
+ $(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.o : %.s\r
+ $(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@\r
+%.elf: $(OBJ)\r
+ $(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@\r
+%.obj: %.elf\r
+ $(BIN) -O avrobj -R .eeprom $< $@\r
+%.rom: %.elf\r
+ $(BIN) -O $(FORMAT) -R .eeprom $< $@\r
+%.eep: %.elf\r
+ $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+\r
+# No error message if successfully compiled\r
+%ok:\r
+ @echo "Errors: none" \r
+\r
+# Clean up directory\r
+clean:\r
+ $(RM) $(OBJ)\r
+ $(RM) $(SRC:.c=.s)\r
+ $(RM) $(SRC:.c=.lst)\r
+ $(RM) $(TRG).map\r
+ $(RM) $(TRG).elf\r
+\r
+ $(RM) $(TRG).obj\r
+ $(RM) $(TRG).a90\r
+ $(RM) $(TRG).hex \r
+ $(RM) *.bak\r
+ $(RM) *.log\r
+ \r
+size:\r
+ $(SIZE) $(TRG).elf\r
+ \r
:020000040000FA\r
:20000000C9A6020078563412140000810081B586688A689AD1ED53B586C1ED43B786E12299\r
-:13002000B98621CF6A3E00CD5E81EB2101473E01C35E8115\r
+:13002000B98621D86A3E00CD5E81EB2104453E01C35E810B\r
:2005C900CD8881F8FF21060039EB218184010200EDB02AC0862323E50303C501B584C53E91\r
-:2005E9000121AA44CD5E81F1F14D44E171237021000039E5210000E52AC08623234E23462C\r
-:20060900C53E00215F73CD5E81F1F1F1DD36FC60DD36FD0021000039E5210100E52AC08627\r
-:2006290023234E2346C53E00215F73CD5E81F1F1F1210200E52E08394D442AC08623235E23\r
-:2006490023563E0021C86DCD5E81F1C31F81D52AC08623235E23563E00212272CD5E81D1B2\r
+:2005E9000121AD42CD5E81F1F14D44E171237021000039E5210000E52AC08623234E23462B\r
+:20060900C53E00216873CD5E81F1F1F1DD36FC60DD36FD0021000039E5210100E52AC0861E\r
+:2006290023234E2346C53E00216873CD5E81F1F1F1210200E52E08394D442AC08623235E1A\r
+:2006490023563E0021D16DCD5E81F1C31F81D52AC08623235E23563E00212B72CD5E81D1A0\r
:20066900C32581CD8881FCFF21000039EB218384010400EDB0DD4602DD70FEDD4604DD7044\r
:20068900FF210400E52B2BC340464DC342462AC08623235E23563E00C34D46CD5E81F1C390\r
:2006A9001F81CD8881FCFF21000039EB218784010400EDB0DD4602DD70FEDD4604DD70FFCA\r
:2007A90023C3204723C369473E00C34D46CD5E81F1C31F81CD8881FCFF21000039EB2197EB\r
:2007C90084010400EDB0DD4602DD70FEDD4604DD70FF210400E52B2BC340464DC394462A4A\r
:2007E900C086C3D94623C3204723C369473E00C3B347CD5E81F1C31F81C5FDE5DDE5D5DDCF\r
-:20080900E13E00213772CD5E81E5DDE5C12AC08623235E23563E0021C86DCD5E81F1DDE156\r
+:20080900E13E00214072CD5E81E5DDE5C12AC08623235E23563E0021D16DCD5E81F1DDE144\r
:20082900FDE1C1C32581CD8881F8FF21000039EB219B84010700EDB0DD4602DD70FADD4621\r
:2008490004DD70FBDD460ADD70FCDD460CDD70FDDD460EDD70FE210700E52E02C340464D05\r
:20086900C394462AC086C3D94623C3204723C369473E00C3B347CD5E81F1C31F81C5D5CD3B\r
:20098900210A00ED4BC08609E5DD5E02DD56033E00213E49CDF649E1712370C31F81ED4BD2\r
:2009A900C086094623666823234E2346237E6960CD5E814D44FD6E06FD6607A7ED42EB0167\r
:2009C9000200CDC181DD6E04DD660519EB3E00216C46C9CD5E814D44FD6E08FD6609A7EDD8\r
-:2009E90042C9CD5E817DB4C93E0121D544CD5E814D44C9CD8881FCFFFDE5110E00CD974A3E\r
+:2009E90042C9CD5E817DB4C93E0121D842CD5E814D44C9CD8881FCFFFDE5110E00CD974A3D\r
:200A0900DD4E0271DD46032370DD460CDD6E0AFD7502DD660BFD7403FD7004DD4610DD6ECD\r
:200A29000EFD7505DD660FFD7406FD7007AFFD7708FD7709DD6E12FD750ADD6613FD740B98\r
:200A4900DD6E14FD750CDD6615FD740D210C00ED4BC086097E23B6210C00ED4BC0860920FB\r
:200A690010FDE5C1712370210A00ED4BC08609181246236668EB210800197E23B6210800F6\r
-:200A89001920EEFDE5C1712370FDE1C31F813E0121D544CD5E81E5FDE1C9FDE5DDE5C5D54F\r
+:200A89001920EEFDE5C1712370FDE1C31F813E0121D842CD5E81E5FDE1C9FDE5DDE5C5D54E\r
:200AA900DD210000FD210000FDE5210200394E2346E1097EB72850FDE5E1095ECD40810AC3\r
:200AC90000212C2E3149696A6B6C72FE4AF94AEF4AF94AF94AEA4AEA4AF44AF44AF44AEAA6\r
:200AE9004A0102001812010300180D01040018080105001803010600DD09210200394E234D\r
:200EE900FEDD66FF5E2356E1732372210800ED4BC08609E5DD4EFEDD46FF030369604E23C9\r
:200F090046E1712370FD4E24FD4625210000CDA6813009FD5E26FD5627CD504FFDCB0B76C8\r
:200F29002011FD7E20FDB6212809FD5E20FD5621CD504FFDE5D1CD504FDD6EF8DD66F9FDE1\r
-:200F4900E1C31F815E23563E0021DC73C35E813E00218F4DC35E81C5FDE5DDE52115001988\r
+:200F4900E1C31F815E23563E0021E573C35E813E00218F4DC35E81C5FDE5DDE5211500197F\r
:200F690046236668E5DDE17DB42808DDE5D1CD584F18F1C32748CD88810000FDE5211500FD\r
:200F8900DD5E02DD5603195623666AE5FDE17DB4283D210A00FDE5C109DD7E04DD56052F7D\r
:200FA9005F7A2F577EA377237EA277210A00097EDDB60A77237EDDB60B77210A00097EDD6C\r
-:200FC900AE0C77237EDDAE0D772113000918B81177853E0021A06BCD5E81FDE1C31F81C5F1\r
+:200FC900AE0C77237EDDAE0D772113000918B81177853E0021A96BCD5E81FDE1C31F81C5E8\r
:200FE900FDE5DDE5D5DDE12115001946236668E5FDE121200019462366680100903E80ACDC\r
:2010090067ED42302EDD4E20DD4621210000CDA6813020DD6E20DD662129E5210800ED4BA1\r
:20102900C086094E2346E1092B2B46DD70202366DD7421DD6E22DD66230100903E80AC677E\r
:201BA9003E0021FE57C35E81DD5EFEDD56FF3E0021224CCD5E81DD4EFEDD46FFFDE5D1FDE7\r
:201BC9007E1FFD6E1DFD661EC9CD5281FDE5D5FDE1DD6E0ADD660BE53E00218C55CD5E81E4\r
:201BE900E1210302DD4E04DD4605A7ED422040FDCB0A5E283A3E08DDAE0ADDB60BFD5E20C2\r
-:201C0900FD56213E00213772200DCDEB492815CD3D5C2B3600180DCD485C233600CD3D5CB8\r
-:201C2900DD460A70210000E5010301CD3F53E1FDE1C31F81FD5E20FD56213E00213772CDAE\r
+:201C0900FD56213E00214072200DCDEB492815CD3D5C2B3600180DCD485C233600CD3D5CAF\r
+:201C2900DD460A70210000E5010301CD3F53E1FDE1C31F81FD5E20FD56213E00214072CDA5\r
:201C49005E81FD4E20FD462109C9C5FDE5DDE521B8FF39F9D5DDE1AF7723772377237721E0\r
:201C69000A00ED4BC086097E23666F46236668E5210E00194E2346E1A7ED422803CDE7544F\r
:201C8900DDCB0A46CA975D21020039E52B2BCD5053E1210200394E23462B2B2BCDDB57CD3D\r
:201CE90006DD560720073E0021784718053E0021EE46CD5E81DD5E20DD5621210A00ED4BE8\r
:201D0900C0860946236668010500094E2346237E6960CDF649DD6E08DD6609A7ED42EB0197\r
:201D29000200CDC1816960394623666819010700094D44210000395E235613133E00216C73\r
-:201D490046CD5E81DDCB0B462836FD210000DD5E20DD56213E00213772CDF649FDE5E1A7E6\r
+:201D490046CD5E81DDCB0B462836FD210000DD5E20DD56213E00214072CDF649FDE5E1A7DD\r
:201D6900ED42210600300B39FDE5C109362AFD2318DC39FDE5C109360021060039EB1806EC\r
:201D8900DD5E20DD56213E00210248CD5E8121480039F9C32748CD88810000FDE5DD6E0E58\r
:201DA900DD660FE5DD6E0CDD660DE5DD6E0ADD660BE5DD5E02DD5603CDA95BF1F1F1E5FDD6\r
:201E890070FD360A01FD360B00FD3617F9FD36185DFD361900FD361AFFFD361B5DFD361CD0\r
:201EA90000FD361DF8FD361E57FD361F00C31A4CCD88810000DD6E0ADD660BE5DD5E02DD36\r
:201EC90056033E00219B50CD5E81E1C31F81CD8881CEFFFDE5DD36D800210000E5C53E01EC\r
-:201EE90021AA44CD5E81F1F1DD75D4DD74D5DD36F02BDD36F100DD36F21ADD36F300DD3686\r
+:201EE90021AD42CD5E81F1F1DD75D4DD74D5DD36F02BDD36F100DD36F21ADD36F300DD3685\r
:201F0900F400DD7ED8FE732018DD6ED9DD66DADD75F0DD74F1DD6EDBDD66DCDD75F2DD7449\r
:201F2900F3DD7ED8FE422807DD7ED8FE4D204FDD4EDD0600C5CD9762D5DD4EDBDD5EF0DD9A\r
:201F490056F1CDA062D5DD4EDADD5EF2DD56F3CD2A81D5DD5ED950DD4EF0DD46F1CD2A81DD\r
:2021E900111400CD8F62FD7520FD7421FD6E20FD662136001804FDCB0BF6DD7EEB2E004DE4\r
:20220900E6F0472610ED423010DD6EEADD7EEBE60F6723FD7522FD7423FDE5DD5E024BDD8A\r
:20222900560342211D00094E2346237E6960C1CD5E81211400E52E0E394D44DD5ED4DD56C3\r
-:20224900D5CD8762F13E14ADB4CA075FDD5ED4DD56D53E00212272CD5E81DD5E02DD5603ED\r
+:20224900D5CD8762F13E14ADB4CA075FDD5ED4DD56D53E00212B72CD5E81DD5E02DD5603E4\r
:202269003E0021E84FCD5E81DD5E024BDD560342211A00094E2346237E6960C3E8563E016E\r
-:20228900213147C35E813E0121D544C35E81DD4EDCDD5EF2DD56F3CD2A811B1B1BC9CD889E\r
+:20228900213445C35E813E0121D842C35E81DD4EDCDD5EF2DD56F3CD2A811B1B1BC9CD889C\r
:2022A90081EAFFFDE5DD6E02DD6603E5FDE121060039EB21A784010E00EDB0FD6E26DD754D\r
:2022C900EAFD6627DD74EB2323233E01AE23B62008C5010104CD3F53E1DD6EEADD66EB235D\r
:2022E900232346236668CB853E02ADB4C212646F67E5E5010100FD5E11FD56123E00217FDE\r
:2027E90086095E2356CD584F3E00218648CD5E813E00215746CD5E81D1C1C32581CD8881A4\r
:20280900FEFFDD4E02DD4603210E00ED5BC086195E23563E0021D75ECD5E81210400ED4B15\r
:20282900C086097E23B6C2C468210100E523394D442AC08623235E2356CD8762F13E01ADE7\r
-:20284900B420D8DD4EFE47C521D684E53E0021016ECD5E81F1F1AFDDB6FE28294FC5210EFE\r
+:20284900B420D8DD4EFE47C521D684E53E00210A6ECD5E81F1F1AFDDB6FE28294FC5210EF5\r
:2028690000ED5BC086195E2356210E00ED4BC0860946236668011700094E2346237E6960A2\r
:202889000101001829DD4EFFC5210E00ED5BC086195E2356210E00ED4BC086094623666863\r
:1E28A900011700094E2346237E6960010200CD5E81E1DD46FEDD70FFC32468C31F8120\r
:200395001B4B1B5300001B4300001B4E00001B5200001B4600001B6800001B5A00000000E7\r
:1403B500001B45001B002F776E642F303030302E73637200DC\r
:2028C700FDE5DDE5C521C0FF39F9D5DDE1210C00197E23666FAFB62008DD360CDEDD360D7D\r
-:2028E7008421000039362D012F00DD5E0CDD560D3E0021386BCD5E81E5FDE17DB42804FD0E\r
-:20290700231809DD6E0CDD660DE5FDE1FDE5C12100003911010019EB3E0021A075CD5E81CF\r
+:2028E7008421000039362D012F00DD5E0CDD560D3E0021416BCD5E81E5FDE17DB42804FD05\r
+:20290700231809DD6E0CDD660DE5FDE1FDE5C12100003911010019EB3E0021C574CD5E81AB\r
:2029270021000039E5214200397E23666FC171237021400039472366682323AF772377DDC5\r
-:202947005E06DD56073E0021046BCD5E81DD5E04DD56053E0021E76DCD5E81DD5E0ADD560A\r
-:202967000B3E0021B36DCD5E81210100E5DD4E0ADD460B11E6843E0021066FCD5E81F121A3\r
-:202987000100E5DD4E00DD460111EB843E0021066FCD5E81F1214000394E2346DD5E0CDD95\r
-:2029A700560D3E00214C73CD5E81DD5E0CDD560D3E00210F73CD5E811101003E0121014715\r
+:202947005E06DD56073E00210D6BCD5E81DD5E04DD56053E0021F06DCD5E81DD5E0ADD56F8\r
+:202967000B3E0021BC6DCD5E81210100E5DD4E0ADD460B11E6843E00210F6FCD5E81F12191\r
+:202987000100E5DD4E00DD460111EB843E00210F6FCD5E81F1214000394E2346DD5E0CDD8C\r
+:2029A700560D3E00215573CD5E81DD5E0CDD560D3E00211873CD5E811101003E0121044502\r
:2029C700CD5E8121420039F9DDE1FDE1C32581CD8881E0FFFDE5DD6E02DD6603E5FDE1219C\r
-:2029E7002600DD4E02DD4603094623666823232346236668010101A7ED42C2CA6AFD6E201D\r
+:2029E7002600DD4E02DD4603094623666823232346236668010101A7ED42C2D36AFD6E2014\r
:202A0700FD662146DD70ECFD6E20FD66212346DD70EDDD36EE00FD6E20FD66213600210E85\r
-:202A27000039EB3E0021BC74CD5E81DD75E0DD74E1FD4E20FD46210303DD71EADD70EB7D0A\r
-:202A4700B4287123237E23666F46DD70E2DD6EE0DD66E12323462366682346DD70E3DD3679\r
-:202A6700E400210400394D44DD5EEADD56EB3E0121FD41CD5E81DD75E8DD74E9DD4EE0DD93\r
-:202A870046E1030369604E2346DD5EE8DD56E93E00216E72CD5E817DB420193E00218648C1\r
-:202AA700CD5E81010000DD5EE0DD56E13E0021C768CD5E81FDE5D1FD7E1CFD6E1AFD661BAC\r
-:202AC700CD5E81FDE1C31F81CD52813E0021BA66CD5E813E0021B466CD5E810110000936C2\r
-:1D2AE700D623366923360011F0843E00210668CD5E813E0021E167CD5E81C31F812D\r
+:202A27000039EB3E00213975CD5E81EB3E0021EC74CD5E81DD75E0DD74E1FD4E20FD462129\r
+:202A47000303DD71EADD70EB7DB4287123237E23666F46DD70E2DD6EE0DD66E12323462300\r
+:202A670066682346DD70E3DD36E400210400394D44DD5EEADD56EB3E01210040CD5E81DD96\r
+:202A870075E8DD74E9DD4EE0DD46E1030369604E2346DD5EE8DD56E93E00217772CD5E81D0\r
+:202AA7007DB420193E00218648CD5E81010000DD5EE0DD56E13E0021C768CD5E81FDE5D1AF\r
+:202AC700FD7E1CFD6E1AFD661BCD5E81FDE1C31F81CD52813E0021BA66CD5E813E0021B48A\r
+:202AE70066CD5E810110000936D623366923360011F0843E00210668CD5E813E0021E167D7\r
+:062B0700CD5E81C31F81B9\r
:2003F2002F62696E2F736800484F4D450055534552002F776E642F6C6F676E2E7363720044\r
-:202B0400CD5281D5210600E5210700E53E00211E6BCD5E81F1F1F1C31F8121040039C5D561\r
-:142B24005E2356234D44F7300622BB8621FFFFD1C1C3258168\r
+:202B0D00CD5281D5210600E5210700E53E0021276BCD5E81F1F1F1C31F8121040039C5D54F\r
+:142B2D005E2356234D44F7300622BB8621FFFFD1C1C325815F\r
:0B003300DDF9DDE1D1C1F1ED3939C983\r
-:202B3800CD8881FEFFDD5E02DD56033E00213772CD5E81DD5E02DD560319DD75FEDD74FF57\r
-:202B580079B02008DD6EFEDD66FF1839DD6E02DD6603DD4EFEDD46FFA7ED422825DD6EFEE6\r
-:202B7800DD66FF2BDD75FEDD74FF4E0600DD6E04DD6605A7ED422008DD6EFEDD66FF18059F\r
-:202B980018CA210000C31F81CD8881F8FFAFDD77FEDD77FFDD7E02DDB6032078115F853ED8\r
-:202BB8000021A06BCD5E817DB4201E1177853E0021A06BCD5E817DB4200F118F853E0021AF\r
-:202BD800A06BCD5E817DB4280621FFFFC3B06D2A5D85DD7502DD7403DD7E02DDB603282ECB\r
-:202BF800DD5E02DD56033E0021A06BCD5E817DB4280621FFFFC3B06D211600DD4E02DD464F\r
-:202C180003095623666ADD7502DD740318CA210000C3B06D210C00DD4E02DD4603097EE6CF\r
-:202C380080CA066D210600DD4E02DD4603095E23560A6F030A67A7ED52DD75FADD74FB7D7D\r
-:202C5800B4CA046D210600DD4E02DD46030946236668DD75F8DD74F9DD6EFADD66FBE5DDDA\r
-:202C78004EF8DD46F9210A00DD5E02DD5603195E23563E0021C86DCD5E81F1DD75FCDD747C\r
-:202C9800FD4D44210000CDA681301E210000397EDD86FC77237EDD8EFD77210200397EDD46\r
-:202CB80096FC77237EDD9EFD77DD4EFCDD46FD210000CDA68138A1DD7EFCDDA6FD3C2009F2\r
-:202CD8002ABB863E04ADB4288FDD7EFADDB6FB281B210C00DD4E02DD4603097EF60077235A\r
-:202CF8007EF60277DD36FEFFDD36FFFF186A210C00DD4E02DD4603097EE640285BDD6E022F\r
-:202D1800DD66034E2346DD6E02DD660323235623666AA7ED42DD75FADD74FB4D442100005C\r
-:202D3800CDA6813033210100E5DD4EFADD46FBA7210000ED427C079F4F41C5E5210A00DD7F\r
-:202D58004E02DD4603095E23563E0021306ECD5E81F1F1F1CB782800210C00DD4E02DD46A1\r
-:202D780003097EE63F77237EE6FA7769602323E5210400DD4E02DD460309E521060009563D\r
-:202D980023666AE56960C1712370E1712370E1712370DD6EFEDD66FFC31F81CD5281D52167\r
-:202DB8000300E53E00211E6BCD5E81F1F1C31F81CD5281DD6E0ADD660BE5C5D5212400E54E\r
-:0F2DD8003E00211E6BCD5E81F1F1F1F1C31F8131\r
+:202B4100CD8881FEFFDD5E02DD56033E00214072CD5E81DD5E02DD560319DD75FEDD74FF45\r
+:202B610079B02008DD6EFEDD66FF1839DD6E02DD6603DD4EFEDD46FFA7ED422825DD6EFEDD\r
+:202B8100DD66FF2BDD75FEDD74FF4E0600DD6E04DD6605A7ED422008DD6EFEDD66FF180596\r
+:202BA10018CA210000C31F81CD8881F8FFAFDD77FEDD77FFDD7E02DDB6032078115F853ECF\r
+:202BC1000021A96BCD5E817DB4201E1177853E0021A96BCD5E817DB4200F118F853E002194\r
+:202BE100A96BCD5E817DB4280621FFFFC3B96D2A5D85DD7502DD7403DD7E02DDB603282EB0\r
+:202C0100DD5E02DD56033E0021A96BCD5E817DB4280621FFFFC3B96D211600DD4E02DD4633\r
+:202C210003095623666ADD7502DD740318CA210000C3B96D210C00DD4E02DD4603097EE6BD\r
+:202C410080CA0F6D210600DD4E02DD4603095E23560A6F030A67A7ED52DD75FADD74FB7D6B\r
+:202C6100B4CA0D6D210600DD4E02DD46030946236668DD75F8DD74F9DD6EFADD66FBE5DDC8\r
+:202C81004EF8DD46F9210A00DD5E02DD5603195E23563E0021D16DCD5E81F1DD75FCDD746A\r
+:202CA100FD4D44210000CDA681301E210000397EDD86FC77237EDD8EFD77210200397EDD3D\r
+:202CC10096FC77237EDD9EFD77DD4EFCDD46FD210000CDA68138A1DD7EFCDDA6FD3C2009E9\r
+:202CE1002ABB863E04ADB4288FDD7EFADDB6FB281B210C00DD4E02DD4603097EF600772351\r
+:202D01007EF60277DD36FEFFDD36FFFF186A210C00DD4E02DD4603097EE640285BDD6E0225\r
+:202D2100DD66034E2346DD6E02DD660323235623666AA7ED42DD75FADD74FB4D4421000053\r
+:202D4100CDA6813033210100E5DD4EFADD46FBA7210000ED427C079F4F41C5E5210A00DD76\r
+:202D61004E02DD4603095E23563E0021396ECD5E81F1F1F1CB782800210C00DD4E02DD468F\r
+:202D810003097EE63F77237EE6FA7769602323E5210400DD4E02DD460309E5210600095634\r
+:202DA10023666AE56960C1712370E1712370E1712370DD6EFEDD66FFC31F81CD5281D5215E\r
+:202DC1000300E53E0021276BCD5E81F1F1C31F81CD5281DD6E0ADD660BE5C5D5212400E53C\r
+:0F2DE1003E0021276BCD5E81F1F1F1F1C31F811F\r
:16003E00F5C5E5784251676BED4CED6CED5C79858257E1C1F1C922\r
-:202DE700CD5281D5210300E5210700E53E00211E6BCD5E81F1F1F1C31F81CD8881FCFF2185\r
-:202E07000E003901020009DD75FCDD74FDE5DD4E0ADD460B1177853E0021CF79CD5E81F123\r
-:202E2700DD75FEDD74FFC31F81CD5281DD6E0EDD660FE5DD6E0CDD660DE5DD6E0ADD660B29\r
-:202E4700E5D5211900E53E0121534BCD5E81F1F1F1F1F1C32282CD8881FEFF2A5D85DD759B\r
-:202E6700FEDD74FF1177853E0021A06BCD5E81118F853E0021A06BCD5E81DD7EFEDDB6FFB4\r
-:202E8700283CDD5EFEDD56FF3E0021A06BCD5E81210A00DD4EFEDD46FF095E23563E002191\r
-:202EA7002272CD5E81210A000936FF2336FF211600095623666ADD75FEDD74FF18BCC31F2B\r
-:202EC70081C5D52AA7857DB42002182E21000022A7851101003E00218A73CD5E817DB428FF\r
-:1F2EE7000C2183857EF60177237EF600770E00115D6E3E0121204BCD5E81D1C1C3258141\r
+:202DF000CD5281D5210300E5210700E53E0021276BCD5E81F1F1F1C31F81CD8881FCFF2173\r
+:202E10000E003901020009DD75FCDD74FDE5DD4E0ADD460B1177853E00215177CD5E81F19A\r
+:202E3000DD75FEDD74FFC31F81CD5281DD6E0EDD660FE5DD6E0CDD660DE5DD6E0ADD660B20\r
+:202E5000E5D5211900E53E01215649CD5E81F1F1F1F1F1C32282CD8881FEFF2A5D85DD7591\r
+:202E7000FEDD74FF1177853E0021A96BCD5E81118F853E0021A96BCD5E81DD7EFEDDB6FF99\r
+:202E9000283CDD5EFEDD56FF3E0021A96BCD5E81210A00DD4EFEDD46FF095E23563E00217F\r
+:202EB0002B72CD5E81210A000936FF2336FF211600095623666ADD75FEDD74FF18BCC31F19\r
+:202ED00081C5D52AA7857DB42002182E21000022A7851101003E00219373CD5E817DB428ED\r
+:1F2EF0000C2183857EF60177237EF600770E0011666E3E01212349CD5E81D1C1C325812E\r
:200471000000C286C286C286C286C2870000100000000000000000000000C287C287C28717\r
:20049100C287C28801002000000000000000000000009D859D859D859D859F8502002200C7\r
:0C04B1000000000000000000000001003E\r
-:202F0600CD8881F2FFAFDD77F4DD77F5DD5E02DD56033E00213772CD5E81DD75F6DD74F7ED\r
-:202F260059503E00213772CD5E81DD75F8DD74F92AB986DD75F2DD74F3DD6EF2DD66F34DE9\r
-:202F4600440303DD71F2DD70F346236668DD75FADD74FB7DB4283EDD6EF6DD66F7E5DD4EB0\r
-:202F660002DD4603DD5EFADD56FB3E01215047CD5E81F17DB42014DD6EF6DD66F7DD4EFA27\r
-:202F8600DD46FB097EFE3D2002180ADD34F42003DD34F518A4DD7EFADDB6FBC2B770DD6E06\r
-:202FA600F4DD66F5232329EB3E0121D544CD5E81DD75FCDD74FD7DB4200C210C0022BB86D7\r
-:202FC60021FFFFC37F71DD6EF4DD66F529E5ED4BB986DD5EFCDD56FD3E0121D949CD5E8188\r
-:202FE600F1DD6EF8DD66F9DD4EF6DD46F709EB13133E0121D544CD5E81DD75FADD74FB7DCC\r
-:20300600B42010DD5EFCDD56FD3E0021DC73CD5E8118A7DD6EF6DD66F7E5DD4E02DD460393\r
-:20302600DD5EFADD56FB3E0121D949CD5E81F1DD6EF6DD66F7DD4EFADD46FB09363DDD6E83\r
-:20304600F8DD66F923E5DD4E04DD4605DD6EF6DD66F7DD5EFADD56FB19EB133E0121D94960\r
-:20306600CD5E81F1DD6EF4DD66F529DD4EFCDD46FD09DD5EFADD56FB732372DD6EF4DD66D0\r
-:20308600F529092323AF7723772AA9857DB4280CED5BA9853E0021DC73CD5E81DD6EFCDD4C\r
-:2030A60066FD22A985DD6EFCDD66FD22B986C37C71DD7E0ADDB60BCA7C71DD5EFADD56FBA2\r
-:2030C6003E00213772CD5E81DD75FCDD74FDDD6EF8DD66F9DD4EF6DD46F7094D4403DD6EF8\r
-:2030E600FCDD66FDA7ED423067DD6EF8DD66F9DD4EF6DD46F709EB13133E0121D544CD5EA9\r
-:2031060081DD75FEDD74FF7DB42003C3C06FDD6EF6DD66F7E5DD4E02DD4603DD5EFEDD5623\r
-:20312600FF3E0121D949CD5E81F1DD6EF6DD66F7DD4EFEDD46FF09363DDD6EF2DD66F32B8B\r
-:203146002BDD75F2DD74F3DD71FADD70FB712370DD6EF8DD66F923E5DD4E04DD4605DD6EF9\r
-:20316600F6DD66F7DD5EFADD56FB19EB133E0121D949CD5E81F1210000C31F81CD8881F82E\r
-:20318600FFDD5E02DD56033E00213772CD5E81DD75FEDD74FF2AB986DD75F8DD74F9DD7514\r
-:2031A600FADD74FBDD6EF8DD66F94D440303DD71F8DD70F946236668DD75FCDD74FD7DB41D\r
-:2031C600284DDD6EFEDD66FFE5DD4E02DD4603DD5EFCDD56FD3E01215047CD5E81F17DB485\r
-:2031E6002012DD6EFEDD66FFDD4EFCDD46FD097EFE3D2819DD6EFADD66FB4D440303DD715A\r
-:1C320600FADD70FBDD4EFCDD46FD7123701895DD6EFADD66FBAF772377C31F81CC\r
+:202F0F00CD8881F2FFAFDD77F4DD77F5DD5E02DD56033E00214072CD5E81DD75F6DD74F7DB\r
+:202F2F0059503E00214072CD5E81DD75F8DD74F92AB986DD75F2DD74F3DD6EF2DD66F34DD7\r
+:202F4F00440303DD71F2DD70F346236668DD75FADD74FB7DB4283EDD6EF6DD66F7E5DD4EA7\r
+:202F6F0002DD4603DD5EFADD56FB3E01215345CD5E81F17DB42014DD6EF6DD66F7DD4EFA1D\r
+:202F8F00DD46FB097EFE3D2002180ADD34F42003DD34F518A4DD7EFADDB6FBC2C070DD6EF4\r
+:202FAF00F4DD66F5232329EB3E0121D842CD5E81DD75FCDD74FD7DB4200C210C0022BB86CD\r
+:202FCF0021FFFFC38871DD6EF4DD66F529E5ED4BB986DD5EFCDD56FD3E0121DC47CD5E8175\r
+:202FEF00F1DD6EF8DD66F9DD4EF6DD46F709EB13133E0121D842CD5E81DD75FADD74FB7DC2\r
+:20300F00B42010DD5EFCDD56FD3E0021E573CD5E8118A7DD6EF6DD66F7E5DD4E02DD460381\r
+:20302F00DD5EFADD56FB3E0121DC47CD5E81F1DD6EF6DD66F7DD4EFADD46FB09363DDD6E79\r
+:20304F00F8DD66F923E5DD4E04DD4605DD6EF6DD66F7DD5EFADD56FB19EB133E0121DC4756\r
+:20306F00CD5E81F1DD6EF4DD66F529DD4EFCDD46FD09DD5EFADD56FB732372DD6EF4DD66C7\r
+:20308F00F529092323AF7723772AA9857DB4280CED5BA9853E0021E573CD5E81DD6EFCDD3A\r
+:2030AF0066FD22A985DD6EFCDD66FD22B986C38571DD7E0ADDB60BCA8571DD5EFADD56FB87\r
+:2030CF003E00214072CD5E81DD75FCDD74FDDD6EF8DD66F9DD4EF6DD46F7094D4403DD6EE6\r
+:2030EF00FCDD66FDA7ED423067DD6EF8DD66F9DD4EF6DD46F709EB13133E0121D842CD5E9F\r
+:20310F0081DD75FEDD74FF7DB42003C3C96FDD6EF6DD66F7E5DD4E02DD4603DD5EFEDD5611\r
+:20312F00FF3E0121DC47CD5E81F1DD6EF6DD66F7DD4EFEDD46FF09363DDD6EF2DD66F32B81\r
+:20314F002BDD75F2DD74F3DD71FADD70FB712370DD6EF8DD66F923E5DD4E04DD4605DD6EF0\r
+:20316F00F6DD66F7DD5EFADD56FB19EB133E0121DC47CD5E81F1210000C31F81CD8881F824\r
+:20318F00FFDD5E02DD56033E00214072CD5E81DD75FEDD74FF2AB986DD75F8DD74F9DD7502\r
+:2031AF00FADD74FBDD6EF8DD66F94D440303DD71F8DD70F946236668DD75FCDD74FD7DB414\r
+:2031CF00284DDD6EFEDD66FFE5DD4E02DD4603DD5EFCDD56FD3E01215345CD5E81F17DB47B\r
+:2031EF002012DD6EFEDD66FFDD4EFCDD46FD097EFE3D2819DD6EFADD66FB4D440303DD7151\r
+:1C320F00FADD70FBDD4EFCDD46FD7123701895DD6EFADD66FBAF772377C31F81C3\r
:0204BD0000003D\r
-:20322200CD5281D5210600E53E00211E6BCD5E81F1F1C31F81CD8881FEFFDD6E02DD6603CC\r
-:20324200DD75FEDD74FFDD6EFEDD66FFAFB6280ADD34FE2003DD34FF18ECDD4E02DD460311\r
-:20326200DD6EFEDD66FFA7ED42C31F81CD8881FAFFDD6E02DD6603DD75FADD74FBDD71FC44\r
-:20328200DD70FDDD6EFCDD66FD23DD75FCDD74FD2B46DD70FFDD6EFADD66FB23DD75FADD10\r
-:2032A20074FB2B4EDD71FE79B82008AFDDB6FE280218D0DD4EFF0600DD6EFE2600A7ED42B8\r
-:0332C200C31F81A6\r
+:20322B00CD5281D5210600E53E0021276BCD5E81F1F1C31F81CD8881FEFFDD6E02DD6603BA\r
+:20324B00DD75FEDD74FFDD6EFEDD66FFAFB6280ADD34FE2003DD34FF18ECDD4E02DD460308\r
+:20326B00DD6EFEDD66FFA7ED42C31F81CD8881FAFFDD6E02DD6603DD75FADD74FBDD71FC3B\r
+:20328B00DD70FDDD6EFCDD66FD23DD75FCDD74FD2B46DD70FFDD6EFADD66FB23DD75FADD07\r
+:2032AB0074FB2B4EDD71FE79B82008AFDDB6FE280218D0DD4EFF0600DD6EFE2600A7ED42AF\r
+:0332CB00C31F819D\r
:12005400E3F5C54E2346237BEDB12002232309C39C81B9\r
-:2032C500CD8881FEFFDD6E02DD6603DD75FEDD74FFDD6EFEDD66FFAFB6280ADD34FE20038F\r
-:2032E500DD34FF18ECDD4E02DD4603DD6EFEDD66FFA7ED42E5DD4E02DD46031102003E0078\r
-:2033050021C86DCD5E81F1C3B082CD52817BB22008DD3602FEDD360384DD5E02DD5603CDDE\r
-:20332500C572110485CDC572ED5BBB863E0121DC47CD5E81DD7502DD7403EBCDC57211074C\r
-:0733450085CDC572C31F8195\r
+:2032CE00CD8881FEFFDD6E02DD6603DD75FEDD74FFDD6EFEDD66FFAFB6280ADD34FE200386\r
+:2032EE00DD34FF18ECDD4E02DD4603DD6EFEDD66FFA7ED42E5DD4E02DD46031102003E006F\r
+:20330E0021D16DCD5E81F1C3B082CD52817BB22008DD3602FEDD360384DD5E02DD5603CDCC\r
+:20332E00CE72110485CDCE72ED5BBB863E0121DF45CD5E81DD7502DD7403EBCDCE72110727\r
+:07334E0085CDCE72C31F8183\r
:0B0412006572726F72003A20000A0051\r
-:20334C00CD52812AB986E53E0121BD47CD5E81F1C31F81CD5281DD6E0EDD660FE5DD6E0C88\r
-:20336C00DD660DE5DD6E0ADD660BE5210F00E53E00211E6BCD5E81F1F1F1F1C31F81CD885F\r
-:20338C0081E2FF210000394D44DD5E02DD56033E0021C573CD5E817DA43C2812DD7EE6E660\r
-:2033AC00006FDD7EE7E6F0673E20ACB528052100001803210100C31F81CD5281C5D5210DFE\r
-:2033CC0000E53E00211E6BCD5E81F1F1F1C31F81CD8881FCFF21FCFFDD4E02DD460309DD0C\r
-:2033EC0075FEDD74FF23237E23B6280621FFFFC3B9742AE489DD75FCDD74FDDD4EFCDD46A7\r
-:20340C00FDDD6EFEDD66FFA7ED423817DD6EFCDD66FD232346236668DD4EFEDD46FFA7ED10\r
-:20342C00423053DD6EFCDD66FD23234E2346DD6EFCDD66FDA7ED423829DD4EFEDD46FFDD51\r
-:20344C006EFCDD66FDA7ED423816DD6EFCDD66FD23234E2346DD6EFEDD66FFA7ED4230027B\r
-:20346C001814DD6EFCDD66FD232346236668DD75FCDD74FD1885DD6EFEDD66FF2323E5DD44\r
-:20348C004EFCDD46FD030369604E2346E1712370DD6EFCDD66FD2323DD4EFEDD46FF71239F\r
-:2034AC0070DD6EFCDD66FD22E489210000C31F81CD8881FEFFDD7E02DDB603200B211600CE\r
-:2034CC0022BB8621000018473E00211E75CD5E813E00218275CD5E81DD75FEDD74FF7DB48C\r
-:2034EC00281FDD4E02DD4603DD6EFEDD66FF5E23563E00216E72CD5E817DB4200218021854\r
-:12350C00CF3E00216375CD5E81DD6EFEDD66FFC31F810D\r
+:20335500CD52812AB986E53E0121C045CD5E81F1C31F81CD5281DD6E0EDD660FE5DD6E0C7E\r
+:20337500DD660DE5DD6E0ADD660BE5210F00E53E0021276BCD5E81F1F1F1F1C31F81CD884D\r
+:2033950081E2FF210000394D44DD5E02DD56033E0021CE73CD5E817DA43C2812DD7EE6E64E\r
+:2033B500006FDD7EE7E6F0673E20ACB528052100001803210100C31F81CD5281C5D5210DF5\r
+:2033D50000E53E0021276BCD5E81F1F1F1C31F81CD8881FCFF21FCFFDD4E02DD460309DDFA\r
+:2033F50075FEDD74FF23237E23B6280621FFFFC3C2742AD688DD75FCDD74FDDD4EFCDD46A4\r
+:20341500FDDD6EFEDD66FFA7ED423817DD6EFCDD66FD232346236668DD4EFEDD46FFA7ED07\r
+:20343500423053DD6EFCDD66FD23234E2346DD6EFCDD66FDA7ED423829DD4EFEDD46FFDD48\r
+:203455006EFCDD66FDA7ED423816DD6EFCDD66FD23234E2346DD6EFEDD66FFA7ED42300272\r
+:203475001814DD6EFCDD66FD232346236668DD75FCDD74FD1885DD6EFEDD66FF2323E5DD3B\r
+:203495004EFCDD46FD030369604E2346E1712370DD6EFCDD66FD2323DD4EFEDD46FF712396\r
+:1034B50070DD6EFCDD66FD22D688210000C31F810C\r
:19006600E1C5D5DDE5DD210000DD39E9E526806F7EED2039ED3939E3E95E\r
-:20351E00D52AAB857DA43C280CED5BAB853E00212272CD5E81210080E52AAD85E53E01218F\r
-:20353E00AA44CD5E81F1F122AB857DA43C20122ABB86E5211585E53E0021016ECD5E81F1B5\r
-:20355E00F1D1C32581D52AAB857DA43C280CED5BAB853E00212272CD5E8121FFFF22AB85DA\r
-:20357E00D1C32581D52AAB857DA43C280EED5BAB853E0021C775CD5E811803210000D1C3A2\r
-:02359E00258185\r
+:2034C500CD528159503E00214072CD5E8123E5DD4E04DD4605DD5E02DD56033E0121DC478C\r
+:2034E500CD5E81F1C31F81CD8881FEFF3E00214F75CD5E813E0021B375CD5E81DD75FEDDC5\r
+:2035050074FF7DB4281D210400DD4EFEDD46FF0946236668DD4E02DD4603A7ED42200218AA\r
+:143525000218D13E00219475CD5E81DD6EFEDD66FFC31F81A5\r
+:20007F00E3F5C54E23462378B1280D0B7B962320F57A9620F12323230909C39C81E1C5D541\r
+:1B009F00DDE5DD210000DD395E235623EB39F9EBE909097E23666FC1F1E3C99F\r
+:20353900CD5281210A00E50100003E0121274BCD5E81F1C31F81D52AAB857DA43C280CED42\r
+:203559005BAB853E00212B72CD5E81210080E52AAD85E53E0121AD42CD5E81F1F122AB8529\r
+:203579007DA43C20122ABB86E5211585E53E00210A6ECD5E81F1F1D1C32581D52AAB857D68\r
+:20359900A43C280CED5BAB853E00212B72CD5E8121FFFF22AB85D1C32581D52AAB857DA4E3\r
+:1835B9003C280EED5BAB853E0121CF4BCD5E811803210000D1C3258174\r
:20041D002F6574632F706173737764004552524E4F202564206F70656E696E6720706173F0\r
:07043D0073776F72640A007F\r
:0404BF00FFFF0985AD\r
-:2035A000CD528159503E00213772CD5E8123E5DD4E04DD4605DD5E02DD56033E0121D949BA\r
-:0735C000CD5E81F1C31F8104\r
-:1D007F00E3F5C54E23462378B1280D0B7B962320F57A9620F12323230909C39C81BF\r
-:2035C700CD8881F4FF210001E501C288DD5E02DD56033E01213147CD5E81F1DD75FEDD7440\r
-:2035E700FF4D44210000CDA6813806210000C34C78010A0011C2883E01216D4BCD5E81DD32\r
-:2036070075F4DD74F57DB4285BDD6EF4DD66F523DD75F4DD74F52B3600210100E501C28867\r
-:20362700DD6EF4DD66F5A7ED42DD4EFEDD46FFA7ED427C079F4F41C5E5DD5E02DD56033E08\r
-:203647000021306ECD5E81F1F1F1DD6EF4DD66F52B2B7EFE0D200ADD6EF4DD66F52B2B36A2\r
-:2036670000C3FD76210001E501C288DD5E02DD56033E01213147CD5E81F1DD75FEDD74FF33\r
-:203687004D44210000CDA6813806210000C34C78010A0011C2883E01216D4BCD5E81DD751B\r
-:2036A700F4DD74F57DB428BC210100E5DD6EFEDD66FF7C079F5F53D5E501C288DD6EF4DD2D\r
-:2036C70066F5A7ED427C079F5F53A7C1ED42EBC1ED42E5D5210100C109EB210000C1ED4AC2\r
-:2036E700E5D5DD5E02DD56033E0021306ECD5E81F1F1F1C3CC753AC288FE2328153AC288B0\r
-:20370700FE20280E3AC288FE0A28073AC288FE092003C3CC75DD36F4C2DD36F588AFDD7785\r
-:20372700FCDD77FD010780DD6EFCDD66FD3E80AC67ED42D2F777DD5EFCDD56FDCDD0820060\r
-:20374700000700AD775A77657770777E778C779777A277DD6EF4DD66F522C2891848DD6EF5\r
-:20376700F4DD66F522C489183DDD6EF4DD66F5DD75FADD74FB182FDD6EF4DD66F5DD75F83B\r
-:20378700DD74F91821DD6EF4DD66F522CA891816DD6EF4DD66F522CC89180BDD6EF4DD66F2\r
-:2037A700F522CE891800010680DD6EFCDD66FD3E80AC67ED42302E013A00DD5EF4DD56F57E\r
-:2037C7003E01216D4BCD5E81DD75F4DD74F57DB42003C3CC75DD6EF4DD66F523DD75F4DD7D\r
-:2037E70074F52B3600DD34FC2003DD34FDC32B77210A00E5210400394D44DD5EF8DD56F9F7\r
-:203807003E0121434CCD5E81F122C889DD6EF6DD66F7AFB62803C3CC75210A00E52104005E\r
-:20382700394D44DD5EFADD56FB3E0121434CCD5E81F122C689DD6EF6DD66F7AFB62803C389\r
-:08384700CC7521C289C31F8169\r
-:1E009C00E1C5D5DDE5DD210000DD395E235623EB39F9EBE909097E23666FC1F1E3C924\r
-:20384F00CD8881FAFFAFDD77FBDD77FC59503E00213772CD5E81DD75FDDD74FEDD6E04DD15\r
-:20386F0066057EFE2D2014DD6E04DD660523DD7504DD74052B46DD700A180EAFDDB60A2829\r
-:20388F0008DD34FD2003DD34FEDD7E10DDA6113C281DDD4EFDDD46FEDD6E10DD6611CDA6E6\r
-:2038AF0081300CDD6E10DD6611DD75FDDD74FEDD4EFDDD46FEDD6E0EDD660FCDA681300CCB\r
-:2038CF00DD6EFDDD66FEDD750EDD740FDD6E0EDD660FDD75FBDD74FC211400397EDD96FDEF\r
-:2038EF0077237EDD9EFE77DD7E0EDDB60F2009DD7EFDDDB6FECAC679DD7E08DDB609203438\r
-:20390F00DD7E0EDDB60F282CDD7EFDDDB6FE280FAFDDB60A2809DD7E0CFE3020021823DDCD\r
-:20392F00460CDD70FADD6E0EDD660F2BDD750EDD740F184EDD7EFDDDB6FE2833AFDDB60A53\r
-:20394F00280CDD460ADD70FADD360A001812DD6E04DD660523DD7504DD74052B46DD70FA4B\r
-:20396F00DD6EFDDD66FE2BDD75FDDD74FE1813DD460CDD70FADD6E0EDD660F2BDD750EDD32\r
-:20398F00740FDD4E02DD4603DD5EFA16003E01219A4DCD5E81DD7EFAFE0A20183E01DDAEA5\r
-:2039AF0012DDB613200EDD5E02DD56033E0021A06BCD5E81C3F678DD6EFBDD66FCC3B082DE\r
-:2039CF00CD8881A2FFAFDD77B0DD77B1210C00DD5E02DD5603197EE6034F237EE60047DD8F\r
-:2039EF0071FDDD70FE210C00197EE6FC77237EE6FF77DD6E04DD6605AFB6CAD47EDD6E047E\r
-:203A0F00DD66057EFE25C2877E3E02DDAEFDDDB6FE200EDD5E02DD56033E0021A06BCD5E58\r
-:203A2F0081AFDD77A4DD77A5DD36B300DD36B220DD36ACFFDD36ADFFAFDD77AADD77ABDDA5\r
-:203A4F0036A8FFDD36A9FFDD36AE0ADD36AF00211B0039DD75B5DD74B6DD36B400AFDD77E5\r
-:203A6F00A6DD77A7AFDD77A2DD77A3DD34042003DD3405DD6E04DD66057EFE30380BDD6EDB\r
-:203A8F0004DD66053E39BE3002186521000039010A00CD6682DD6E04DD66054E060021D0F1\r
-:203AAF00FF094D44210000397E8177237E8877DD7EAADDB6AB280EDD6EA2DD66A3DD75A8A8\r
-:203ACF00DD74A91821DD7EA2DDB6A3200DDD7EB2FE202006DD36B230188ADD6EA2DD66A389\r
-:203AEF00DD75ACDD74ADDD34042003DD34051883DD6E04DD66055ECD4081140000202123D7\r
-:203B0F002A2B2D2E5862636468696C6F70737578837E8B7C937C167E667C5C7CE27BF77BB5\r
-:203B2F00ED7BF77BD37D527C817CD77B597B647B787B717BB57D647B497BDD6E04DD660531\r
-:203B4F002BDD7504DD7405C3877EDD36A401DD36A500C3737ADD6E04DD660546DD70B3C3F7\r
-:203B6F00737ADD36B401C3737A216800397EC60277237ECE00772B6E672B2B46236668DD02\r
-:203B8F0075A2DD74A3DD7EAADDB6AB280EDD6EA2DD66A3DD75A8DD74A9182ADD6EA2DD6659\r
-:203BAF00A3DD75ACDD74ADCB7C281ADD36A401DD36A500DD4EA2DD46A3A7210000ED42DDF7\r
-:203BCF0075ACDD74ADC3737ADD36AA01DD36AB00C3737ADD36A601DD36A700C3737AAFDD2B\r
-:203BEF0077A6DD77A7C3737A210A00E5211D0039E5DD7EA6DDB6A7281D216C00397EC604F4\r
-:203C0F0077237ECE00772B6E6701FCFF095E2356234E2346181A216C00397EC60277237E2C\r
-:203C2F00CE00772B6E672B2B5E23567A079F4F413E00212A7FCD5E81F1F1DD75B5DD74B6AF\r
-:203C4F00C33A7EDD36AE02DD36AF001837DD36AE08DD36AF00182DAFDD77A6DD77A7DD367F\r
-:203C6F00B230DD36AC05DD36AD00DD36A808DD36A900DD36AE10DD36AF001808DD36AEF0EC\r
-:203C8F00DD36AFFFDD7EA6DDB6A7281E216800397EC60477237ECE00772B6E6701FCFF0967\r
-:203CAF005E2356234E2346EB1819216800397EC60277237ECE00772B6E672B2B4623666836\r
-:203CCF00010000DD75B9DD74BADD71BBDD70BCDD5EAEDD56AFD5211D003901040009E5DDC5\r
-:203CEF004EBBDD46BCDD5EB9DD56BA3E0121F64ECD5E81F1F1DD75B5DD74B6DD36B730DDD5\r
-:203D0F0036B885AFDDB6B4CAB27D3E02DDAEAEDDB6AF200ADD36B731DD36B88518493E085B\r
-:203D2F00DDAEAEDDB6AF2018DD7EB9DDB6BADDB6BBDDB6BC2808DD36B734DD36B885182706\r
-:203D4F003E10DDAEAEDDB6AF200ADD36B736DD36B88518133E0FDDAEAEDDA6AF3C2008DDED\r
-:203D6F0036B739DD36B885DD6EB7DD66B8AFB62832DD36B200DD4EB7DD46B8211B00395DAE\r
-:203D8F00543E0021A075CD5E81DD4EB5DD46B6211B00395D543E0121334BCD5E81DD75B530\r
-:203DAF00DD74B6C33A7EDD6E04DD6605234E0600DD71A2DD70A379B02808DD34042003DD16\r
-:203DCF003405181C216800397EC60277237ECE00772B6E672B2B46236668DD75A2DD74A38D\r
-:203DEF00DD46A2DD6EB5DD66B670DD6EB5DD66B6233600AFDDB6B4280CDD6EB5DD66B646CB\r
-:203E0F00DD70B21822181C216800397EC60277237ECE00772B6E672B2B46236668DD75B52D\r
-:203E2F00DD74B6DD36B220DD36B300DD6EFDDD66FEE5DD6EA8DD66A9E5DD6EACDD66ADE5C3\r
-:203E4F00DD6EB2E5DD6EB3E5DD6EA4DD66A5E5DD4EB5DD46B6DD5E02DD5603CD4F78EB2106\r
-:203E6F000C0039F9EB4D44210E00397E8177237E8877180218021842DD4E02DD4603DD6ECF\r
-:203E8F0004DD66055E16003E01219A4DCD5E81DD34B02003DD34B1DD6E04DD66057EFE0A9D\r
-:203EAF0020183E01DDAEFDDDB6FE200EDD5E02DD56033E0021A06BCD5E81DD34042003DD97\r
-:203ECF003405C3017A210C00DD4E02DD4603097EDDB6FD77237EDDB6FE773E02DDAEFDDD00\r
-:203EEF00B6FE200EDD5E02DD56033E0021A06BCD5E813E01DDAEFDDDB6FE2016210400DDB8\r
-:1B3F0F004E02DD460309E5210600094E2346E1712370DD6EB0DD66B1C31F8115\r
+:2035D100CD8881FAFFAFDD77FBDD77FC59503E00214072CD5E81DD75FDDD74FEDD6E04DD8D\r
+:2035F10066057EFE2D2014DD6E04DD660523DD7504DD74052B46DD700A180EAFDDB60A28AA\r
+:2036110008DD34FD2003DD34FEDD7E10DDA6113C281DDD4EFDDD46FEDD6E10DD6611CDA666\r
+:2036310081300CDD6E10DD6611DD75FDDD74FEDD4EFDDD46FEDD6E0EDD660FCDA681300C4B\r
+:20365100DD6EFDDD66FEDD750EDD740FDD6E0EDD660FDD75FBDD74FC211400397EDD96FD6F\r
+:2036710077237EDD9EFE77DD7E0EDDB60F2009DD7EFDDDB6FECA4877DD7E08DDB609203438\r
+:20369100DD7E0EDDB60F282CDD7EFDDDB6FE280FAFDDB60A2809DD7E0CFE3020021823DD4E\r
+:2036B100460CDD70FADD6E0EDD660F2BDD750EDD740F184EDD7EFDDDB6FE2833AFDDB60AD4\r
+:2036D100280CDD460ADD70FADD360A001812DD6E04DD660523DD7504DD74052B46DD70FACC\r
+:2036F100DD6EFDDD66FE2BDD75FDDD74FE1813DD460CDD70FADD6E0EDD660F2BDD750EDDB3\r
+:20371100740FDD4E02DD4603DD5EFA16003E0121C049CD5E81DD7EFAFE0A20183E01DDAE03\r
+:2037310012DDB613200EDD5E02DD56033E0021A96BCD5E81C37876DD6EFBDD66FCC3B082D5\r
+:20375100CD8881A2FFAFDD77B0DD77B1210C00DD5E02DD5603197EE6034F237EE60047DD0F\r
+:2037710071FDDD70FE210C00197EE6FC77237EE6FF77DD6E04DD6605AFB6CA567CDD6E047E\r
+:20379100DD66057EFE25C2097C3E02DDAEFDDDB6FE200EDD5E02DD56033E0021A96BCD5E50\r
+:2037B10081AFDD77A4DD77A5DD36B300DD36B220DD36ACFFDD36ADFFAFDD77AADD77ABDD26\r
+:2037D10036A8FFDD36A9FFDD36AE0ADD36AF00211B0039DD75B5DD74B6DD36B400AFDD7766\r
+:2037F100A6DD77A7AFDD77A2DD77A3DD34042003DD3405DD6E04DD66057EFE30380BDD6E5C\r
+:2038110004DD66053E39BE3002186521000039010A00CD6682DD6E04DD66054E060021D071\r
+:20383100FF094D44210000397E8177237E8877DD7EAADDB6AB280EDD6EA2DD66A3DD75A828\r
+:20385100DD74A91821DD7EA2DDB6A3200DDD7EB2FE202006DD36B230188ADD6EA2DD66A309\r
+:20387100DD75ACDD74ADDD34042003DD34051883DD6E04DD66055ECD408114000020212357\r
+:203891002A2B2D2E5862636468696C6F70737578057C0D7A157A987BE879DE796479797939\r
+:2038B1006F797979557BD479037A5979DB78E678FA78F378377BE678CB78DD6E04DD660539\r
+:2038D1002BDD7504DD7405C3097CDD36A401DD36A500C3F577DD6E04DD660546DD70B3C379\r
+:2038F100F577DD36B401C3F577216800397EC60277237ECE00772B6E672B2B46236668DD85\r
+:2039110075A2DD74A3DD7EAADDB6AB280EDD6EA2DD66A3DD75A8DD74A9182ADD6EA2DD66D9\r
+:20393100A3DD75ACDD74ADCB7C281ADD36A401DD36A500DD4EA2DD46A3A7210000ED42DD77\r
+:2039510075ACDD74ADC3F577DD36AA01DD36AB00C3F577DD36A601DD36A700C3F577AFDD2E\r
+:2039710077A6DD77A7C3F577210A00E5211D0039E5DD7EA6DDB6A7281D216C00397EC604F5\r
+:2039910077237ECE00772B6E6701FCFF095E2356234E2346181A216C00397EC60277237EAD\r
+:2039B100CE00772B6E672B2B5E23567A079F4F413E0021AC7CCD5E81F1F1DD75B5DD74B6B1\r
+:2039D100C3BC7BDD36AE02DD36AF001837DD36AE08DD36AF00182DAFDD77A6DD77A7DD3681\r
+:2039F100B230DD36AC05DD36AD00DD36A808DD36A900DD36AE10DD36AF001808DD36AEF06D\r
+:203A1100DD36AFFFDD7EA6DDB6A7281E216800397EC60477237ECE00772B6E6701FCFF09E7\r
+:203A31005E2356234E2346EB1819216800397EC60277237ECE00772B6E672B2B46236668B6\r
+:203A5100010000DD75B9DD74BADD71BBDD70BCDD5EAEDD56AFD5211D003901040009E5DD45\r
+:203A71004EBBDD46BCDD5EB9DD56BA3E0121D24ACD5E81F1F1DD75B5DD74B6DD36B730DD7D\r
+:203A910036B885AFDDB6B4CA347B3E02DDAEAEDDB6AF200ADD36B731DD36B88518493E085C\r
+:203AB100DDAEAEDDB6AF2018DD7EB9DDB6BADDB6BBDDB6BC2808DD36B734DD36B885182787\r
+:203AD1003E10DDAEAEDDB6AF200ADD36B736DD36B88518133E0FDDAEAEDDA6AF3C2008DD6E\r
+:203AF10036B739DD36B885DD6EB7DD66B8AFB62832DD36B200DD4EB7DD46B8211B00395D2F\r
+:203B1100543E0021C574CD5E81DD4EB5DD46B6211B00395D543E01213649CD5E81DD75B58B\r
+:203B3100DD74B6C3BC7BDD6E04DD6605234E0600DD71A2DD70A379B02808DD34042003DD17\r
+:203B51003405181C216800397EC60277237ECE00772B6E672B2B46236668DD75A2DD74A30D\r
+:203B7100DD46A2DD6EB5DD66B670DD6EB5DD66B6233600AFDDB6B4280CDD6EB5DD66B6464B\r
+:203B9100DD70B21822181C216800397EC60277237ECE00772B6E672B2B46236668DD75B5AE\r
+:203BB100DD74B6DD36B220DD36B300DD6EFDDD66FEE5DD6EA8DD66A9E5DD6EACDD66ADE544\r
+:203BD100DD6EB2E5DD6EB3E5DD6EA4DD66A5E5DD4EB5DD46B6DD5E02DD5603CDD175EB2108\r
+:203BF1000C0039F9EB4D44210E00397E8177237E8877180218021842DD4E02DD4603DD6E50\r
+:203C110004DD66055E16003E0121C049CD5E81DD34B02003DD34B1DD6E04DD66057EFE0AFB\r
+:203C310020183E01DDAEFDDDB6FE200EDD5E02DD56033E0021A96BCD5E81DD34042003DD0E\r
+:203C51003405C38377210C00DD4E02DD4603097EDDB6FD77237EDDB6FE773E02DDAEFDDD01\r
+:203C7100B6FE200EDD5E02DD56033E0021A96BCD5E813E01DDAEFDDDB6FE2016210400DD2F\r
+:1B3C91004E02DD460309E5210600094E2346E1712370DD6EB0DD66B1C31F8196\r
:0C044400003062003000307800305800BA\r
-:203F2A00CD8881FEFFDD36FE41DDCB0D7E2816DD36FE61DD4E0CDD460DA7210000ED42DD34\r
-:203F4A00750CDD740DDD6EFEE53E0ADDAE0CDDB60D20043E011801AF4FC5DD6E0CDD660DE5\r
-:203F6A00E5DD6E0ADD660BE5DD4E04DD4605DD5E02DD56033E01210040CD5E81F1F1F1F1F0\r
-:033F8A00C31F81D1\r
+:203CAC00CD8881FEFFDD36FE41DDCB0D7E2816DD36FE61DD4E0CDD460DA7210000ED42DDB5\r
+:203CCC00750CDD740DDD6EFEE53E0ADDAE0CDDB60D20043E011801AF4FC5DD6E0CDD660D66\r
+:203CEC00E5DD6E0ADD660BE5DD4E04DD4605DD5E02DD56033E00210F7DCD5E81F1F1F1F126\r
+:033D0C00C31F8151\r
:1200BA00C5E5F57CEE806778EE8047F1A7ED42E1C1C9E5\r
-:20400000CD8881D6FFDD6E0ADD660BDD75F8DD74F921000039DD75FADD74FB212C0039DD69\r
-:2040200075FCDD74FD213A00397ED60A77DD4E0CDD460D212400CDA6813811010280DD6EA1\r
-:204040000CDD660D3E80AC67ED423003C38341DD6EFCDD66FD23237EE60047237EE680B01B\r
-:204060002831AFDDB60E282BDD6EF8DD66F923DD75F8DD74F92B362DDD4E04DD4605DD6EDE\r
-:2040800002DD6603CD6B83DD7502DD7403DD7104DD7005DD6EFCDD66FD23237E23B620028B\r
-:2040A000184EDD6E0CDD660D7C079F4F41C5E5DD4E04DD4605DD6E02DD6603CD0283E5DD99\r
-:2040C0006EFADD66FB23DD75FADD74FB2BC171212C0039DD5E0CDD560D7A079F4F41CDF2A6\r
-:2040E00082DD6EFCDD66FD23237E23B620B41830DD5E02DD5603DD4E0CDD460DCDB881DD41\r
-:204100006EFADD66FB23DD75FADD74FB2B73DD5E02DD5603CDEB81DD6EFCDD66FD73237265\r
-:20412000DD6EFCDD66FD7E23B620C5210000394D44DD6EFADD66FBA7ED42DD75FFAFDDB6E5\r
-:20414000FF2840DD6EFADD66FB2BDD75FADD74FB46DD70FE78FE0A300ADD7EFEC630DD77C4\r
-:20416000FE1809DD7EFEDD8610DD77FEDD6EF8DD66F923DD75F8DD74F92BDD46FE70DD35FE\r
-:20418000FF18BADD6EF8DD66F93600DD6E0ADD660BC31F81CD8881FEFFDD36FE41DDCB0BBB\r
-:2041A0007E2816DD36FE61DD4E0ADD460BA7210000ED42DD750ADD740BDD6EFEE50E01C5BD\r
-:2041C000DD6E0ADD660BE5DD6E04DD6605E53E0ADDAE0ADDB60B200DDD5E02DD56037A073F\r
-:2041E0009F4F411809DD5E02DD56030100003E01210040CD5E81F1F1F1F1C31F81CD8881B2\r
-:20420000DCFFDD36F8B9DD36F979DD36FA37DD36FB9E211000E501000011D0893E01219910\r
-:2042200049CD5E81F1210200E5DD4E04DD460511D0893E0121D949CD5E81F1DD36FE00DDC2\r
-:204240007EFEFE0E302EDD4EFE0600DD6E02DD6603097EB7281E21D289DD4EFE060009E599\r
-:20426000DD4EFE0600DD6E02DD66030946E170DD34FE18CBDD4EFE0600DD6E02DD6603091F\r
-:204280007EB72818DD4EFE0600DD6E02DD6603093AD2898632D289DD34FE18D8211000E521\r
-:2042A00001D089210A00395D543E0121D949CD5E81F1AFDD77F4DD77F5DD77F6DD77F7AFEC\r
-:2042C000DD77E0DD77E1DD77E2DD77E3AFDD77DCDD77DDDD77DEDD77DFDD36FE40AFDDB600\r
-:2042E000FECAFF4321180039DD4EFADD46FBDD5EF8DD56F9CDB78221000039E521060039FB\r
-:204300005E2356234E2346EB3E05CD0782C5E5DD6EE8DD66E9C109EBDD6EEADD66EBC1ED99\r
-:204320004AE5D5DD6EE2DD66E3E5DD6EE0DD66E1E5DD6EF4DD66F5C109EBDD6EF6DD66F766\r
-:20434000C1ED4AE5D5210E00395E2356234E2346EB3E04CD3882C5E5DD6EE4DD66E5C10913\r
-:20436000EBDD6EE6DD66E7C1ED4A4D44EBCD7982CD7982EBE1CDB78221040039E5210200BB\r
-:20438000395E2356234E2346EB3E05CD0782C5E5DD6EF0DD66F1C109EBDD6EF2DD66F3C1AD\r
-:2043A000ED4AE5D5DD6EDEDD66DFE5DD6EDCDD66DDE5DD6EF4DD66F5C109EBDD6EF6DD6600\r
-:2043C000F7C1ED4AE5D5210A00395E2356234E2346EB3E04CD3882C5E5DD6EECDD66EDC199\r
-:2043E00009EBDD6EEEDD66EFC1ED4A4D44EBCD7982CD7982EBE1CDB782DD35FEC3DD422175\r
-:20440000000039DD75FCDD74FDDD36FE02DD7EFEFE0DD2A044DD7EFEFE0820282100003999\r
-:20442000E5210600395E2356234E2346EB3E1CCD0782EBE1CD9782DD7EFCC604DD77FC3098\r
-:2044400003DD34FDDD6EFCDD66FD5E2356234E2346EB7DE63FDD77FF3E06DD6EFCDD66FD68\r
-:20446000CDDD81DD7EFFFE0C300ADD7EFFC62EDD77FF1819DD7EFFFE26300ADD7EFFC63594\r
-:20448000DD77FF1808DD7EFFC63BDD77FFDD4EFE060021D08909DD46FF70DD34FEC30D4494\r
-:0A44A000AF32DD8921D089C31F81EE\r
-:2044AA00CD5281DD6E0EDD660FE5DD6E0CDD660DE5DD6E0ADD660BE5211400E53E00211E17\r
-:0B44CA006BCD5E81F1F1F1F1C31F81A9\r
-:2000CC00F5E5CD5082EBE1F1C9F5C5E5AFCD2783F5CD5082F1B728031318067B2F5F7A2F06\r
+:203D0F00CD8881D6FFDD6E0ADD660BDD75F8DD74F921000039DD75FADD74FB212C0039DD5D\r
+:203D2F0075FCDD74FD213A00397ED60A77DD4E0CDD460D212400CDA6813811010280DD6E95\r
+:203D4F000CDD660D3E80AC67ED423003C3927EDD6EFCDD66FD23237EE60047237EE680B0C3\r
+:203D6F002831AFDDB60E282BDD6EF8DD66F923DD75F8DD74F92B362DDD4E04DD4605DD6ED2\r
+:203D8F0002DD6603CD4983DD7502DD7403DD7104DD7005DD6EFCDD66FD23237E23B62002A1\r
+:203DAF00184EDD6E0CDD660D7C079F4F41C5E5DD4E04DD4605DD6E02DD6603CDE082E5DDB0\r
+:203DCF006EFADD66FB23DD75FADD74FB2BC171212C0039DD5E0CDD560D7A079F4F41CDD0BC\r
+:203DEF0082DD6EFCDD66FD23237E23B620B41830DD5E02DD5603DD4E0CDD460DCDB881DD35\r
+:203E0F006EFADD66FB23DD75FADD74FB2B73DD5E02DD5603CDEB81DD6EFCDD66FD73237259\r
+:203E2F00DD6EFCDD66FD7E23B620C5210000394D44DD6EFADD66FBA7ED42DD75FFAFDDB6D9\r
+:203E4F00FF2840DD6EFADD66FB2BDD75FADD74FB46DD70FE78FE0A300ADD7EFEC630DD77B8\r
+:203E6F00FE1809DD7EFEDD8610DD77FEDD6EF8DD66F923DD75F8DD74F92BDD46FE70DD35F2\r
+:203E8F00FF18BADD6EF8DD66F93600DD6E0ADD660BC31F81CD8881FEFFDD36FE41DDCB0BAF\r
+:203EAF007E2816DD36FE61DD4E0ADD460BA7210000ED42DD750ADD740BDD6EFEE50E01C5B1\r
+:203ECF00DD6E0ADD660BE5DD6E04DD6605E53E0ADDAE0ADDB60B200DDD5E02DD56037A0733\r
+:1D3EEF009F4F411809DD5E02DD56030100003E00210F7DCD5E81F1F1F1F1C31F8134\r
+:20400000CD8881DCFFDD36F8B9DD36F979DD36FA37DD36FB9E211000E501000011C2883E06\r
+:2040200001219C47CD5E81F1210200E5DD4E04DD460511C2883E0121DC47CD5E81F1DD36F1\r
+:20404000FE00DD7EFEFE0E302EDD4EFE0600DD6E02DD6603097EB7281E21C488DD4EFE06BD\r
+:204060000009E5DD4EFE0600DD6E02DD66030946E170DD34FE18CBDD4EFE0600DD6E02DDA5\r
+:204080006603097EB72818DD4EFE0600DD6E02DD6603093AC4888632C488DD34FE18D821C4\r
+:2040A0001000E501C288210A00395D543E0121DC47CD5E81F1AFDD77F4DD77F5DD77F6DD24\r
+:2040C00077F7AFDD77E0DD77E1DD77E2DD77E3AFDD77DCDD77DDDD77DEDD77DFDD36FE4027\r
+:2040E000AFDDB6FECA024221180039DD4EFADD46FBDD5EF8DD56F9CDB78221000039E521F8\r
+:204100000600395E2356234E2346EB3E05CD0782C5E5DD6EE8DD66E9C109EBDD6EEADD66F5\r
+:20412000EBC1ED4AE5D5DD6EE2DD66E3E5DD6EE0DD66E1E5DD6EF4DD66F5C109EBDD6EF609\r
+:20414000DD66F7C1ED4AE5D5210E00395E2356234E2346EB3E04CD3882C5E5DD6EE4DD668A\r
+:20416000E5C109EBDD6EE6DD66E7C1ED4A4D44EBCD7982CD7982EBE1CDB78221040039E531\r
+:20418000210200395E2356234E2346EB3E05CD0782C5E5DD6EF0DD66F1C109EBDD6EF2DDA6\r
+:2041A00066F3C1ED4AE5D5DD6EDEDD66DFE5DD6EDCDD66DDE5DD6EF4DD66F5C109EBDD6E21\r
+:2041C000F6DD66F7C1ED4AE5D5210A00395E2356234E2346EB3E04CD3882C5E5DD6EECDD76\r
+:2041E00066EDC109EBDD6EEEDD66EFC1ED4A4D44EBCD7982CD7982EBE1CDB782DD35FEC3A3\r
+:20420000E04021000039DD75FCDD74FDDD36FE02DD7EFEFE0DD2A342DD7EFEFE0820282192\r
+:20422000000039E5210600395E2356234E2346EB3E1CCD0782EBE1CD9782DD7EFCC604DD04\r
+:2042400077FC3003DD34FDDD6EFCDD66FD5E2356234E2346EB7DE63FDD77FF3E06DD6EFC07\r
+:20426000DD66FDCDDD81DD7EFFFE0C300ADD7EFFC62EDD77FF1819DD7EFFFE26300ADD7E50\r
+:20428000FFC635DD77FF1808DD7EFFC63BDD77FFDD4EFE060021C28809DD46FF70DD34FEBF\r
+:0D42A000C31042AF32CF8821C288C31F81F6\r
+:2042AD00CD5281DD6E0EDD660FE5DD6E0CDD660DE5DD6E0ADD660BE5211400E53E0021270D\r
+:0B42CD006BCD5E81F1F1F1F1C31F81A8\r
+:2000CC00F5E5CD5082EBE1F1C9F5C5E5AFCD0583F5CD5082F1B728031318067B2F5F7A2F28\r
:2000EC0057E1C1F1C95E2356234E2346EBCD0782C37082F5E5CD50827B2F5F7A2F57E1F146\r
:01010C00C929\r
-:2044D500CD8881FAFFDD6E02DD6603232323CB3CCB1DCB3CCB1D23DD75FEDD74FF2AE489C4\r
-:2044F500DD75FCDD74FD7DB42011DD36FCE0DD36FD8921E08922E28922E489DD6EFCDD66F1\r
-:20451500FD232346236668DD75FADD74FBDD6EFADD66FB232346236668DD4EFADD46FBA78A\r
-:20453500ED42CAC545DD6EFADD66FB462366682929DD4EFADD46FB09E5030369604E2346A0\r
-:20455500E1A7ED42206ADD6EFADD66FB232346236668ED4BE489A7ED422015DD6EFADD66CD\r
-:20457500FB23234623666823234623666822E489DD6EFADD66FB23237E23666F4E2346DDCF\r
-:204595006EFADD66FB7E8177237E8877DD6EFADD66FB2323E5DD4EFADD46FB030369604E3C\r
-:2045B5002346030369604E2346E1712370C32245DD6EFADD66FB46236668DD4EFEDD46FFE3\r
-:2045D500A7ED42DA8346DD6EFADD66FB46236668DD4EFEDD46FFA7ED42201CDD6EFCDD66AC\r
-:2045F500FD2323E5DD4EFADD46FB030369604E2346E17123701856DD6EFEDD66FF2929DDA8\r
-:204615004EFADD46FB0922E489DD6EFCDD66FD2323ED5BE4897323722AE4892323E5030335\r
-:2046350069604E2346E1712370DD6EFADD66FB46236668DD4EFEDD46FFA7ED42E52AE489A9\r
-:20465500D1732372DD6EFADD66FB712370DD6EFCDD66FD22E489DD6EFADD66FB2323AF77E0\r
-:204675002377210400DD4EFADD46FB0918272AE489DD4EFADD46FBA7ED42204F1100043E69\r
-:204695000121614FCD5E81DD75FADD74FB7DA43C2006210000C31F81DD6EFADD66FB36002F\r
-:2046B500233601DD6EFADD66FB2323AF772377210400DD4EFADD46FB09EB3E0021DC73CD2B\r
-:2046D5005E812AE489DD75FADD74FBDD6EFADD66FBDD75FCDD74FDDD6EFADD66FB23234689\r
-:0C46F500236668DD75FADD74FBC3224506\r
+:2042D800CD8881FAFFDD6E02DD6603232323CB3CCB1DCB3CCB1D23DD75FEDD74FF2AD688D2\r
+:2042F800DD75FCDD74FD7DB42011DD36FCD2DD36FD8821D28822D48822D688DD6EFCDD662C\r
+:20431800FD232346236668DD75FADD74FBDD6EFADD66FB232346236668DD4EFADD46FBA789\r
+:20433800ED42CAC843DD6EFADD66FB462366682929DD4EFADD46FB09E5030369604E23469E\r
+:20435800E1A7ED42206ADD6EFADD66FB232346236668ED4BD688A7ED422015DD6EFADD66DB\r
+:20437800FB23234623666823234623666822D688DD6EFADD66FB23237E23666F4E2346DDDD\r
+:204398006EFADD66FB7E8177237E8877DD6EFADD66FB2323E5DD4EFADD46FB030369604E3B\r
+:2043B8002346030369604E2346E1712370C32543DD6EFADD66FB46236668DD4EFEDD46FFE1\r
+:2043D800A7ED42DA8644DD6EFADD66FB46236668DD4EFEDD46FFA7ED42201CDD6EFCDD66AA\r
+:2043F800FD2323E5DD4EFADD46FB030369604E2346E17123701856DD6EFEDD66FF2929DDA7\r
+:204418004EFADD46FB0922D688DD6EFCDD66FD2323ED5BD6887323722AD6882323E5030361\r
+:2044380069604E2346E1712370DD6EFADD66FB46236668DD4EFEDD46FFA7ED42E52AD688B7\r
+:20445800D1732372DD6EFADD66FB712370DD6EFCDD66FD22D688DD6EFADD66FB2323AF77EE\r
+:204478002377210400DD4EFADD46FB0918272AD688DD4EFADD46FBA7ED42204F1100043E77\r
+:204498000121574ECD5E81DD75FADD74FB7DA43C2006210000C31F81DD6EFADD66FB360039\r
+:2044B800233601DD6EFADD66FB2323AF772377210400DD4EFADD46FB09EB3E0021E573CD21\r
+:2044D8005E812AD688DD75FADD74FBDD6EFADD66FBDD75FCDD74FDDD6EFADD66FB23234697\r
+:0C44F800236668DD75FADD74FBC3254304\r
:20010D00B7C8CB28CB19CB1CCB1D3D20F5C9B7C8FE0838096C61480600D60818F2CB38CBFB\r
:09012D0019CB1CCB1D3D20F5C9C6\r
-:20470100CD52812ABD863ABF86B5B42812010000DD5E02DD56033ABF862ABD86CD5E81DD80\r
-:204721005E02DD56033E0121A84BCD5E81C31F81CD5281DD6E0ADD660BE5C5D5211700E5A1\r
-:0F4741003E00211E6BCD5E81F1F1F1F1C31F81AE\r
+:20450400CD52812ABD863ABF86B5B42812010000DD5E02DD56033ABF862ABD86CD5E81DD7F\r
+:204524005E02DD56033E0121AB49CD5E81C31F81CD5281DD6E0ADD660BE5C5D5211700E59F\r
+:0F4544003E0021276BCD5E81F1F1F1F1C31F81A4\r
:20013600DDF9DDE1D13333F1ED3939C90405C8CB2ACB1B10FAC9B7C8FE083809414C652E60\r
:0E01560000D60818F229CB11CB103D20F8C9B5\r
-:20475000CD8881FAFFDD71FADD70FBDD6E02DD6603DD75FCDD74FDDD36FE00DD36FF00DDBB\r
-:204770006E0ADD660B2BDD750ADD740B237DB4282CDD6EFCDD66FD23DD75FCDD74FD2B4621\r
-:20479000DD70FFDD6EFADD66FB23DD75FADD74FB2B4EDD71FE79B82802180218C2DD4EFF41\r
-:2047B0000600DD6EFE2600A7ED42C31F81CD5281DD6E0ADD660BE5C5D5210A00E53E00210A\r
-:0C47D0001E6BCD5E81F1F1F1F1C31F8181\r
+:20455300CD8881FAFFDD71FADD70FBDD6E02DD6603DD75FCDD74FDDD36FE00DD36FF00DDBA\r
+:204573006E0ADD660B2BDD750ADD740B237DB4282CDD6EFCDD66FD23DD75FCDD74FD2B4620\r
+:20459300DD70FFDD6EFADD66FB23DD75FADD74FB2B4EDD71FE79B82802180218C2DD4EFF40\r
+:2045B3000600DD6EFE2600A7ED42C31F81CD5281DD6E0ADD660BE5C5D5210A00E53E002109\r
+:0C45D300276BCD5E81F1F1F1F1C31F8177\r
:160164002100003E11CB13CB123DC8CB15CB14ED4230F20918EF35\r
-:2047DC00CD888176FFAFDD77FEDD77FF2AB1857DB4282BDDCB037E200FED4BB185DD6E0227\r
-:2047FC00DD6603CDA6813803C36149DD6E02DD660329ED4BAF850946236668C39649DD4E86\r
-:20481C0002DD4603210000CDA6813803C36149210000E5213C85E53E0121AA44CD5E81F1DF\r
-:20483C00F1DD75FADD74FBCB7C2803C36149218000E5210400394D44DD5EFADD56FB3E01DD\r
-:20485C00213147CD5E81F1DD75F8DD74F94D44210000CDA681D26149AFDD77FCDD77FDDD23\r
-:20487C004EF8DD46F9DD6EFCDD66FDA7ED42D25E4921020039DD4EFCDD46FD097EFE0AC2F0\r
-:20489C00264921E689DD4EFEDD46FF09360011E6893E01214B4FCD5E81DD4E02DD4603A753\r
-:2048BC00ED42205D21000039E501200011E6893E01216D4BCD5E814D44E171237079B020CD\r
-:2048DC0010DD5EFADD56FB3E00212272CD5E811874210000397E23666F7EFE20200B210066\r
-:2048FC000039342320013418E8DD5EFADD56FB3E00212272CD5E812100003946236668180C\r
-:20491C0079AFDD77FEDD77FF182D014F00DD6EFEDD66FFA7ED42301F21020039DD4EFCDD09\r
-:20493C0046FD0946DD6EFEDD66FF23DD75FEDD74FF2B11E6891970DD34FC2003DD34FDC346\r
-:20495C007B48C34A48014E8511E6893E0021A075CD5E81210A00E511E6893E00213772CD4A\r
-:1D497C005E8101E689094D44DD5E02DD56033E01219441CD5E81F121E689C31F81FD\r
+:2045DF00CD888176FFAFDD77FEDD77FF2AB1857DB4282BDDCB037E200FED4BB185DD6E0226\r
+:2045FF00DD6603CDA6813803C36447DD6E02DD660329ED4BAF850946236668C39947DD4E83\r
+:20461F0002DD4603210000CDA6813803C36447210000E5213C85E53E0121AD42CD5E81F1DC\r
+:20463F00F1DD75FADD74FBCB7C2803C36447218000E5210400394D44DD5EFADD56FB3E01DB\r
+:20465F00213445CD5E81F1DD75F8DD74F94D44210000CDA681D26447AFDD77FCDD77FDDD20\r
+:20467F004EF8DD46F9DD6EFCDD66FDA7ED42D2614721020039DD4EFCDD46FD097EFE0AC2EE\r
+:20469F00294721D888DD4EFEDD46FF09360011D8883E00213975CD5E81DD4E02DD4603A75C\r
+:2046BF00ED42205D21000039E501200011D8883E01217049CD5E814D44E171237079B020DA\r
+:2046DF0010DD5EFADD56FB3E00212B72CD5E811874210000397E23666F7EFE20200B21005C\r
+:2046FF000039342320013418E8DD5EFADD56FB3E00212B72CD5E8121000039462366681802\r
+:20471F0079AFDD77FEDD77FF182D014F00DD6EFEDD66FFA7ED42301F21020039DD4EFCDD08\r
+:20473F0046FD0946DD6EFEDD66FF23DD75FEDD74FF2B11D8881970DD34FC2003DD34FDC354\r
+:20475F007E46C34D46014E8511D8883E0021C574CD5E81210A00E511D8883E00214072CD38\r
+:1D477F005E8101D888094D44DD5E02DD56033E0021A37ECD5E81F121D888C31F81CF\r
:200450002F6C69622F6C69626572726F722E74787400556E6B6E6F776E206572726F7220AE\r
:01047000008B\r
:0404C3000000000035\r
:13017A005E2356CD2A81722B73C9EB702B712B722B73C94F\r
-:20499900CD8881FEFFDD6E02DD6603DD75FEDD74FFDD6E0ADD660B2BDD750ADD740B237DD2\r
-:2049B900B42814DD4604DD6EFEDD66FF23DD75FEDD74FF2B7018DADD6E02DD6603C31F81F6\r
-:2049D900CD8881FCFFDD6E02DD6603DD75FCDD74FDDD71FEDD70FFDD6E0ADD660B2BDD7506\r
-:2049F9000ADD740B237DB42820DD6EFEDD66FF23DD75FEDD74FF2B46DD6EFCDD66FD23DD56\r
-:204A190075FCDD74FD2B7018CEDD6E02DD6603C31F81CD8881FAFF2AB3852BDD75FADD744E\r
-:204A3900FB21FFFF22B3853E0021000032BF8622BD86DDCBFB7E2053010500DD5EFADD56AC\r
-:204A5900FBCD2A8121368A195E23562346EBDD75FCDD74FDDD70FE110500DD4EFADD46FB65\r
-:204A7900CD2A8121398A194E2346DD5E02DD5603DD7EFEDD6EFCDD66FDCD5E81DD6EFADDD0\r
-:204A990066FB2BDD75FADD74FB18A7C31F81CD52812AB385CB7C200E010A802AB3853E8095\r
-:204AB900AC67ED42380B210C0022BB8621FFFF18533E01212B4A32BF8622BD86DD7E02DD53\r
-:204AD900B603DDB604283A010500ED5BB385CD2A8121368A19DD5604DD4E02DD46037123F5\r
-:204AF900702372010500ED5BB385CD2A8121398A19DD4E0ADD460B7123702AB3852322B3DC\r
-:1A4B190085210000C31F81CD5281210000E53E0121A74ACD5E81F1C31F8182\r
+:20479C00CD8881FEFFDD6E02DD6603DD75FEDD74FFDD6E0ADD660B2BDD750ADD740B237DD1\r
+:2047BC00B42814DD4604DD6EFEDD66FF23DD75FEDD74FF2B7018DADD6E02DD6603C31F81F5\r
+:2047DC00CD8881FCFFDD6E02DD6603DD75FCDD74FDDD71FEDD70FFDD6E0ADD660B2BDD7505\r
+:2047FC000ADD740B237DB42820DD6EFEDD66FF23DD75FEDD74FF2B46DD6EFCDD66FD23DD55\r
+:20481C0075FCDD74FD2B7018CEDD6E02DD6603C31F81CD8881FAFF2AB3852BDD75FADD744D\r
+:20483C00FB21FFFF22B3853E0021000032BF8622BD86DDCBFB7E2053010500DD5EFADD56AB\r
+:20485C00FBCD2A81212889195E23562346EBDD75FCDD74FDDD70FE110500DD4EFADD46FB73\r
+:20487C00CD2A81212B89194E2346DD5E02DD5603DD7EFEDD6EFCDD66FDCD5E81DD6EFADDDE\r
+:20489C0066FB2BDD75FADD74FB18A7C31F81CD52812AB385CB7C200E010A802AB3853E8094\r
+:2048BC00AC67ED42380B210C0022BB8621FFFF18533E01212E4832BF8622BD86DD7E02DD51\r
+:2048DC00B603DDB604283A010500ED5BB385CD2A8121288919DD5604DD4E02DD4603712303\r
+:2048FC00702372010500ED5BB385CD2A81212B8919DD4E0ADD460B7123702AB3852322B3EA\r
+:1A491C0085210000C31F81CD5281210000E53E0121AA48CD5E81F1C31F8180\r
:0204C700000033\r
:1E018D00EBE3F5E5210600397EAB77237EAA77D1237E73A94F237E72A847F1D1E1C99F\r
-:204B3300CD5281D53E00213772CD5E81D119EB3E0021A075CD5E81DD6E02DD6603C31F814E\r
-:1A4B530021040039D55E2356234D44F7300822BB8621FFFF4D44D1C325810E\r
+:20493600CD5281D53E00214072CD5E81D119EB3E0021C574CD5E81DD6E02DD6603C31F8120\r
+:1A49560021040039D55E2356234D44F7300822BB8621FFFF4D44D1C325810D\r
:1901AB00F57EB3775F237EB27757237EB1774F237EB077472B2B2BF1C9BC\r
-:204B6D00CD8881FEFFDD6E02DD660346DD70FE480600DD6E04DD6605A7ED422008DD6E0201\r
-:204B8D00DD66031809AFDDB6FE2006210000C31F81DD34022003DD340318CACD5281D521F5\r
-:104BAD000B00E53E00211E6BCD5E81F1F1C31F812F\r
+:20497000CD8881FEFFDD6E02DD660346DD70FE480600DD6E04DD6605A7ED422008DD6E0200\r
+:20499000DD66031809AFDDB6FE2006210000C31F81DD34022003DD340318CACD5281D521F4\r
+:1049B0000B00E53E0021276BCD5E81F1F1C31F8125\r
:2001C400DDF9DDE1D1C1C9F57E83775F237E8A7757237E89774F237E8877472B2B2BF1C955\r
-:204BBD00CD8881FEFFDD36FEFFDD36FFFFDD5E02160021B585197EE608280FDD4E02060047\r
-:204BDD0021D0FF09DD75FEDD74FFDD4E02060021B585097EE604280FDD4E02060021A9FFED\r
-:204BFD0009DD75FEDD74FFDD4E02060021B585097EE602280FDD4E02060021B0FF09DD755D\r
-:204C1D00FEDD74FFDD4E04DD4605DD6EFEDD66FFCDA6813808DD36FEFFDD36FFFFDD6EFEA9\r
-:204C3D00DD66FFC3B082CD8881FAFF110280DD6E0ADD660B3E80AC67ED52380EDD4E0ADDB3\r
-:204C5D00460B212400CDA6813007AFDD770ADD770BDD6E02DD66034E060021B585097EE65B\r
-:204C7D0010280ADD34022003DD340318E4DD6E02DD66037EFE2B200ADD34022003DD3403E1\r
-:204C9D00186DDD7E0ADDB60B2065DD6E02DD66037EFE30205ADD6E02DD6603237EEE20FEF1\r
-:204CBD00582017DD360A10DD360B00210800397EC60277237ECE00771835DD6E02DD660318\r
-:204CDD00237EEE20FE422017DD360A02DD360B00210800397EC60277237ECE00771810DD4A\r
-:204CFD00360A08DD360B00DD34022003DD3403DD7E0ADDB60B2008DD360A0ADD360B00AFC8\r
-:204D1D00DD77FADD77FBDD77FCDD77FDDD4E0ADD460BDD6E02DD66035ECDBD4BDD75FEDDE2\r
-:204D3D0074FF7DA43C282E21000039DD5E0ADD560B7A079F4F41CDD58321000039DD5EFEEB\r
-:204D5D00DD56FF7A079F4F41CDB782DD34022003DD340318B7DD7E04DDB6052811DD6E02B8\r
-:204D7D00DD6603E5DD6E04DD6605C1712370DD4EFCDD46FDDD6EFADD66FBC32282CD888188\r
-:204D9D00FEFF3E0021C86ECD5E81210C000946236668DD75FEDD74FF7DE6402818DD5E0489\r
-:204DBD00DD56053E0021A06BCD5E817DB4280621FFFFC3A94EDD7EFEE6206FDD7EFFE6033F\r
-:204DDD00673E20ADB4280621FFFFC3A94E210800DD4E04DD4605095E23560A6F030A67A795\r
-:204DFD00ED523818DD5E04DD56053E0021A06BCD5E817DB4280621FFFFC3A94EDD6E04DD16\r
-:204E1D0066054E234603702B710B6960DD460270210C00DD4E04DD4605097EF68077237E42\r
-:204E3D00F600773E0ADDAE02DDB6032007DD7EFEE6012007DD7EFEE6022817DD5E04DD56FD\r
-:204E5D00053E0021A06BCD5E817DB4280521FFFF183ADD7EFEE6032818210400DD4E04DD98\r
-:204E7D00460509E5210600094E2346E17123701816210400DD4E04DD460509E52108000946\r
-:204E9D004E2346E1712370DD6E022600C31F81CD5281160021B585197EE604280EDD7E025E\r
-:204EBD00EE206FDD7E03EE00671806DD6E02DD6603C31F81CD5281160021B585197EE60201\r
-:194EDD00280EDD7E02EE206FDD7E03EE00671806DD6E02DD6603C31F81E5\r
+:2049C000CD8881FEFF3E0021D16ECD5E81210C000946236668DD75FEDD74FF7DE6402818CA\r
+:2049E000DD5E04DD56053E0021A96BCD5E817DB4280621FFFFC3CF4ADD7EFEE6206FDD7E9E\r
+:204A0000FFE603673E20ADB4280621FFFFC3CF4A210800DD4E04DD4605095E23560A6F0383\r
+:204A20000A67A7ED523818DD5E04DD56053E0021A96BCD5E817DB4280621FFFFC3CF4ADD02\r
+:204A40006E04DD66054E234603702B710B6960DD460270210C00DD4E04DD4605097EF680EC\r
+:204A600077237EF600773E0ADDAE02DDB6032007DD7EFEE6012007DD7EFEE6022817DD5EFD\r
+:204A800004DD56053E0021A96BCD5E817DB4280521FFFF183ADD7EFEE6032818210400DD68\r
+:204AA0004E04DD460509E5210600094E2346E17123701816210400DD4E04DD460509E52109\r
+:204AC0000800094E2346E1712370DD6E022600C31F81CD8881FEFFDD36FE41DDCB0D7E28D3\r
+:204AE00016DD36FE61DD4E0CDD460DA7210000ED42DD750CDD740DDD6EFEE50E00C5DD6EC8\r
+:204B00000CDD660DE5DD6E0ADD660BE5DD4E04DD4605DD5E02DD56033E00210F7DCD5E816B\r
+:204B2000F1F1F1F1C31F81CD8881F8FFAFDD77FCDD77FDDD6E02DD6603DD75FEDD74FFDD21\r
+:204B40006EFEDD66FF4E060021B585097EE610280ADD34FE2003DD34FF18E4DD6EFEDD667F\r
+:204B6000FF7EFE2D2012DD34FC2003DD34FDDD34FE2003DD34FF1813DD6EFEDD66FF7EFEA9\r
+:204B80002B2008DD34FE2003DD34FFDD6E0ADD660BE5DD4E04DD4605DD5EFEDD56FF3E01F7\r
+:204BA00021F24ECD5E81F1DD75F8DD74F9DD71FADD70FBDD7EFCDDB6FD2805CD4983180C02\r
+:0F4BC000DD4EFADD46FBDD6EF8DD66F9C32282BD\r
+:1001E400C5D55E2356234E2346EBCD2183C3C2835C\r
+:204BCF00CD8881F4FF210001E5015A89DD5E02DD56033E01213445CD5E81F1DD75FEDD7488\r
+:204BEF00FF4D44210000CDA6813806210000C3544E010A00115A893E01217049CD5E81DD9C\r
+:204C0F0075F4DD74F57DB4285BDD6EF4DD66F523DD75F4DD74F52B3600210100E5015A89B0\r
+:204C2F00DD6EF4DD66F5A7ED42DD4EFEDD46FFA7ED427C079F4F41C5E5DD5E02DD56033EEA\r
+:204C4F000021396ECD5E81F1F1F1DD6EF4DD66F52B2B7EFE0D200ADD6EF4DD66F52B2B367B\r
+:204C6F0000C3054D210001E5015A89DD5E02DD56033E01213445CD5E81F1DD75FEDD74FF9C\r
+:204C8F004D44210000CDA6813806210000C3544E010A00115A893E01217049CD5E81DD7585\r
+:204CAF00F4DD74F57DB428BC210100E5DD6EFEDD66FF7C079F5F53D5E5015A89DD6EF4DD76\r
+:204CCF0066F5A7ED427C079F5F53A7C1ED42EBC1ED42E5D5210100C109EB210000C1ED4AA4\r
+:204CEF00E5D5DD5E02DD56033E0021396ECD5E81F1F1F1C3D44B3A5A89FE2328153A5A8979\r
+:204D0F00FE20280E3A5A89FE0A28073A5A89FE092003C3D44BDD36F45ADD36F589AFDD77BE\r
+:204D2F00FCDD77FD010780DD6EFCDD66FD3E80AC67ED42D2FF4DDD5EFCDD56FDCDCB830068\r
+:204D4F00000700B54D624D6D4D784D864D944D9F4DAA4DDD6EF4DD66F5225A8A1848DD6E4E\r
+:204D6F00F4DD66F5225C8A183DDD6EF4DD66F5DD75FADD74FB182FDD6EF4DD66F5DD75F884\r
+:204D8F00DD74F91821DD6EF4DD66F522628A1816DD6EF4DD66F522648A180BDD6EF4DD66A2\r
+:204DAF00F522668A1800010680DD6EFCDD66FD3E80AC67ED42302E013A00DD5EF4DD56F5C7\r
+:204DCF003E01217049CD5E81DD75F4DD74F57DB42003C3D44BDD6EF4DD66F523DD75F4DD80\r
+:204DEF0074F52B3600DD34FC2003DD34FDC3334D210A00E5210400394D44DD5EF8DD56F9FB\r
+:204E0F003E0121F24ECD5E81F122608ADD6EF6DD66F7AFB62803C3D44B210A00E521040018\r
+:204E2F00394D44DD5EFADD56FB3E0121F24ECD5E81F1225E8ADD6EF6DD66F7AFB62803C321\r
+:084E4F00D44B215A8AC31F81D4\r
+:2001F400EBE3F5DDE5DD210000DD39C5D5DD5609DD7409DD5E08DD7508CD5B83DDF9DDE146\r
+:20021400F1D13333C9CB782809AF914F3E0098473E01CB7AC8F5AF935F3E009A57F1EE01C8\r
+:20023400C9EBE3F5DDE5DD210000DD39C5D5DD5609DD7409DD5E08DD7508CD5B83E1C1CD61\r
+:09025400B383DDE1F1D13333C9BC\r
+:154E5700CD5281D5211800E53E0021276BCD5E81F1F1C31F81D1\r
+:20025D00F5AF956F3E009C673E00994F3E009847F1C9F5210000010000DD36F82118021925\r
+:20027D0037DDCBFC16DDCBFD16DDCBFE16DDCBFF16DD35F8282ECB11CB10CB15CB14ED5227\r
+:20029D0038DD201078DD960738D5200879DD960638CD180479DD96064F78DD9E074730C14F\r
+:2002BD002BA718BDF1E56069C1C9F57D2F6F7C2F67792F4F782F47F1C9EB702B712B722BD1\r
+:0202DD0073C9E3\r
+:204E6C00CD8881FEFFDD36FEFFDD36FFFFDD5E02160021B585197EE608280FDD4E02060095\r
+:204E8C0021D0FF09DD75FEDD74FFDD4E02060021B585097EE604280FDD4E02060021A9FF3B\r
+:204EAC0009DD75FEDD74FFDD4E02060021B585097EE602280FDD4E02060021B0FF09DD75AB\r
+:204ECC00FEDD74FFDD4E04DD4605DD6EFEDD66FFCDA6813808DD36FEFFDD36FFFFDD6EFEF8\r
+:204EEC00DD66FFC3B082CD8881FAFF110280DD6E0ADD660B3E80AC67ED52380EDD4E0ADD02\r
+:204F0C00460B212400CDA6813007AFDD770ADD770BDD6E02DD66034E060021B585097EE6A9\r
+:204F2C0010280ADD34022003DD340318E4DD6E02DD66037EFE2B200ADD34022003DD34032F\r
+:204F4C00186DDD7E0ADDB60B2065DD6E02DD66037EFE30205ADD6E02DD6603237EEE20FE3F\r
+:204F6C00582017DD360A10DD360B00210800397EC60277237ECE00771835DD6E02DD660366\r
+:204F8C00237EEE20FE422017DD360A02DD360B00210800397EC60277237ECE00771810DD98\r
+:204FAC00360A08DD360B00DD34022003DD3403DD7E0ADDB60B2008DD360A0ADD360B00AF16\r
+:204FCC00DD77FADD77FBDD77FCDD77FDDD4E0ADD460BDD6E02DD66035ECD6C4EDD75FEDD7F\r
+:204FEC0074FF7DA43C282E21000039DD5E0ADD560B7A079F4F41CDED8321000039DD5EFE22\r
+:20500C00DD56FF7A079F4F41CDB782DD34022003DD340318B7DD7E04DDB6052811DD6E0206\r
+:20502C00DD6603E5DD6E04DD6605C1712370DD4EFCDD46FDDD6EFADD66FBC32282CD52810C\r
+:20504C00160021B585197EE604280EDD7E02EE206FDD7E03EE00671806DD6E02DD6603C31B\r
+:20506C001F81CD5281160021B585197EE602280EDD7E02EE206FDD7E03EE00671806DD6EC8\r
+:07508C0002DD6603C31F8172\r
:2004C9000101010101010101011111111111010101010101010101010101010101010101A3\r
:2004E900102020202020202020202020202020204848484848484848484820202020202073\r
:2005090020424242424242020202020202020202020202020202020202020220202020205E\r
:20056900000000000000000000000000000000000000000000000000000000000000000072\r
:20058900000000000000000000000000000000000000000000000000000000000000000052\r
:2005A900000000000000000000000000000000000000000000000000000000000000000032\r
-:204EF600CD8881FEFFDD36FE41DDCB0D7E2816DD36FE61DD4E0CDD460DA7210000ED42DD59\r
-:204F1600750CDD740DDD6EFEE50E00C5DD6E0CDD660DE5DD6E0ADD660BE5DD4E04DD460530\r
-:154F3600DD5E02DD56033E01210040CD5E81F1F1F1F1C31F8180\r
-:2001E400E3F5D57B96235F7A9E23577B96237A9E23C3E4823004EB2329195E2356EBD1F189\r
-:12020400E3C9C5D55E2356234E2346EBCD4383C37884B4\r
-:164F4B00CD5281210A00E50100003E0121764FCD5E81F1C31F817A\r
-:20021600EBE3F5DDE5DD210000DD39C5D5DD5609DD7409DD5E08DD7508CD7D83DDF9DDE101\r
-:20023600F1D13333C9CB782809AF914F3E0098473E01CB7AC8F5AF935F3E009A57F1EE01A6\r
-:20025600C9EBE3F5DDE5DD210000DD39C5D5DD5609DD7409DD5E08DD7508CD7D83E1C1CD1D\r
-:090276006984DDE1F1D13333C9E3\r
-:154F6100CD5281D5211800E53E00211E6BCD5E81F1F1C31F81CF\r
-:20027F00F5AF956F3E009C673E00994F3E009847F1C9F5210000010000DD36F82118021903\r
-:20029F0037DDCBFC16DDCBFD16DDCBFE16DDCBFF16DD35F8282ECB11CB10CB15CB14ED5205\r
-:2002BF0038DD201078DD960738D5200879DD960638CD180479DD96064F78DD9E074730C12D\r
-:2002DF002BA718BDF1E56069C1C9C5D55E2356234E2346EBCDE583C37884E3D5DDE5DD218D\r
-:2002FF000000DD39DD5609DD7409DD5E08DD7508D5C5F5DD6E0462ED6CDD5605ED5C19590A\r
-:20031F00DD5607ED5C19DD5E0650ED5C19E5DD5E04DD56FEED5CDD6E05DD6607ED6C19DDA8\r
-:20033F004606ED4C09E5DD5E04DD5607ED5CDD6E05DD6606ED6CAF1917F5DD5E04DD56062B\r
-:20035F00ED5C4A0600AF091755C14CE10984C1814D47EBF1D1D1DDE1D133333333C9F57D5C\r
-:16037F002F6F7C2F67792F4F782F47F1C9EB702B712B722B73C91E\r
-:204F7600CD8881F8FFAFDD77FCDD77FDDD6E02DD6603DD75FEDD74FFDD6EFEDD66FF4E06EC\r
-:204F96000021B585097EE610280ADD34FE2003DD34FF18E4DD6EFEDD66FF7EFE2D2012DD70\r
-:204FB60034FC2003DD34FDDD34FE2003DD34FF1813DD6EFEDD66FF7EFE2B2008DD34FE2084\r
-:204FD60003DD34FFDD6E0ADD660BE5DD4E04DD4605DD5EFEDD56FF3E0121434CCD5E81F1D2\r
-:204FF600DD75F8DD74F9DD71FADD70FBDD7EFCDDB6FD2805CD6B83180CDD4EFADD46FBDD64\r
-:085016006EF8DD66F9C3228289\r
+:2002DF00E3F5D57B96235F7A9E23577B96237A9E23C3DF833004EB2329195E2356EBD1F191\r
+:2002FF00E3C9C5D55E2356234E2346EBCDFD83C3C283E3D5DDE5DD210000DD39DD5609DD01\r
+:20031F007409DD5E08DD7508D5C5F5DD6E0462ED6CDD5605ED5C1959DD5607ED5C19DD5E41\r
+:20033F000650ED5C19E5DD5E04DD56FEED5CDD6E05DD6607ED6C19DD4606ED4C09E5DD5EB1\r
+:20035F0004DD5607ED5CDD6E05DD6606ED6CAF1917F5DD5E04DD5606ED5C4A0600AF091751\r
+:16037F0055C14CE10984C1814D47EBF1D1D1DDE1D133333333C920\r
:00000001FF\r
000086B5 s_UDATA0 | 000086B5 e_CCSTR | 000086B5 e_ECSTR \r
000086B5 s_CCSTR | 000086B5 e_CDATA0 | 000086B5 s_ECSTR \r
000086B5 e_IDATA0 | 00008A68 e_UDATA0 | 00008A68 s_CSTACK \r
- 00009A68 e_CSTACK | 0000C073 l_CODE | 00010073 e_CODE \r
+ 00009A68 e_CSTACK | 0000C0F4 l_CODE | 000100F4 e_CODE \r
Hexadecimal [32-Bits]\r
\r
Area Addr Size Decimal Bytes (Attributes)\r
0000822E ?SS_RSH_L | 00008238 ?L_LSH_L0 | 00008250 ?S_DIVMOD\r
00008266 ?S_MULASG | 00008270 ?L_END_AS | 00008279 ?L_XOR_L0\r
00008297 ?L_ORASG_ | 000082B0 ?LEAVE_DI | 000082B7 ?L_ADDASG\r
- 000082D0 ?S_S_SWIT | 000082E4 ?S_SWITCH | 000082F2 ?UL_DIVAS\r
- 00008302 ?UL_MOD_L | 00008327 ?S_FIND_S | 00008343 ?UL_DIV_L\r
- 0000836B ?L_NEG_L0 | 0000837D ?L_DIVMOD | 000083D5 ?L_MULASG\r
- 000083E5 ?L_MUL_L0 | 00008469 ?L_NOT_L0 | 00008478 ?L_END_MU\r
+ 000082D0 ?UL_DIVAS | 000082E0 ?UL_MOD_L | 00008305 ?S_FIND_S\r
+ 00008321 ?UL_DIV_L | 00008349 ?L_NEG_L0 | 0000835B ?L_DIVMOD\r
+ 000083B3 ?L_NOT_L0 | 000083C2 ?L_END_MU | 000083CB ?S_S_SWIT\r
+ 000083DF ?S_SWITCH | 000083ED ?L_MULASG | 000083FD ?L_MUL_L0\r
Hexadecimal [32-Bits]\r
\r
Area Addr Size Decimal Bytes (Attributes)\r
\r
Area Addr Size Decimal Bytes (Attributes)\r
-------------------- ---- ---- ------- ----- ------------\r
-CODE 00004000 0000C073 = 49267. bytes (NUL,CON)\r
+CODE 00004000 0000C0F4 = 49396. bytes (NUL,CON)\r
\r
Value Global Value Global Value Global \r
----- ------ ----- ------ ----- ------ \r
00005EB9 rootWindo | 00005ED7 screenbui | 000062A7 root_acti\r
000065DF read_stri | 000066B4 gui_globa | 000066BA GUIinit \r
000067E1 GUIunit | 00006806 GUIgo | 000068C7 login \r
- 000069D6 login_act | 00006ACF main | 00006B04 setgid \r
- 00006B1E unix | 00006B38 strrchr | 00006BA0 fflush \r
- 00006DB3 chdir | 00006DC8 _write | 00006DE7 setuid \r
- 00006E01 printf | 00006E30 lseek | 00006E5D __stdio_c\r
- 00006EC8 __stdio_i | 00006F06 setenv | 00007182 unsetenv \r
- 00007222 close | 00007237 strlen | 0000726E strcmp \r
- 0000730F perror | 0000734C execv | 0000735F ioctl \r
- 0000738A isatty | 000073C5 fstat | 000073DC free \r
- 000074BC getpwnam | 0000751E setpwent | 00007563 endpwent \r
- 00007582 getpwent | 000075A0 strcpy | 000075C7 __getpwen\r
- 000079CF vfprintf | 00007F2A ltoa | 00014000 __longtoa\r
- 00014194 itoa | 000141FD crypt | 000144AA open \r
- 000144D5 malloc | 00014701 exit | 00014731 _read \r
- 00014750 memcmp | 000147BD execve | 000147DC strerror \r
- 00014999 memset | 000149D9 memcpy | 00014AA7 on_exit \r
- 00014B20 atexit | 00014B33 strcat | 00014B53 unix_long\r
- 00014B6D strchr | 00014BA8 _exit | 00014C43 strtoul \r
- 00014D9A fputc | 00014EAC toupper | 00014ED1 tolower \r
- 00014EF6 ultoa | 00014F4B atoi | 00014F61 sbrk \r
- 00014F76 strtol \r
+ 000069D6 login_act | 00006AD8 main | 00006B0D setgid \r
+ 00006B27 unix | 00006B41 strrchr | 00006BA9 fflush \r
+ 00006DBC chdir | 00006DD1 _write | 00006DF0 setuid \r
+ 00006E0A printf | 00006E39 lseek | 00006E66 __stdio_c\r
+ 00006ED1 __stdio_i | 00006F0F setenv | 0000718B unsetenv \r
+ 0000722B close | 00007240 strlen | 00007277 strcmp \r
+ 00007318 perror | 00007355 execv | 00007368 ioctl \r
+ 00007393 isatty | 000073CE fstat | 000073E5 free \r
+ 000074C5 strcpy | 000074EC getpwuid | 00007539 atoi \r
+ 0000754F setpwent | 00007594 endpwent | 000075B3 getpwent \r
+ 00007751 vfprintf | 00007CAC ltoa | 00007D0F __longtoa\r
+ 00007EA3 itoa | 00014000 crypt | 000142AD open \r
+ 000142D8 malloc | 00014504 exit | 00014534 _read \r
+ 00014553 memcmp | 000145C0 execve | 000145DF strerror \r
+ 0001479C memset | 000147DC memcpy | 000148AA on_exit \r
+ 00014923 atexit | 00014936 strcat | 00014956 unix_long\r
+ 00014970 strchr | 000149AB _exit | 000149C0 fputc \r
+ 00014AD2 ultoa | 00014B27 strtol | 00014BCF __getpwen\r
+ 00014E57 sbrk | 00014EF2 strtoul | 00015049 toupper \r
+ 0001506E tolower \r
Hexadecimal [32-Bits]\r
\r
Area Addr Size Decimal Bytes (Attributes)\r
----- ------ ----- ------ ----- ------ \r
000086B5 _argc | 000086B7 _argv | 000086B9 environ \r
000086BB errno | 000086BD __cleanup | 000086C0 global \r
- 000089E0 __malloc_ | 000089E4 __malloc_ | 00008A36 __on_exit\r
+ 000088D2 __malloc_ | 000088D6 __malloc_ | 00008928 __on_exit\r
Hexadecimal [32-Bits]\r
\r
Area Addr Size Decimal Bytes (Attributes)\r
..\..\lib\libcb.lib [ relcb\isatty.rel ]\r
..\..\lib\libsysb.lib [ relsysb\fstat.rel ]\r
..\..\lib\libcb.lib [ relcb\free.rel ]\r
-..\..\lib\libcb.lib [ relcb\getpwnam.rel ]\r
..\..\lib\libiar.lib [ reliar\ENTPARMDIRECT.rel ]\r
..\..\lib\libiar.lib [ reliar\BANKCALLDIRECT.rel ]\r
-..\..\lib\libcb.lib [ relcb\setpwent.rel ]\r
..\..\lib\libcb.lib [ relcb\strcpy.rel ]\r
+..\..\lib\libcb.lib [ relcb\getpwuid.rel ]\r
..\..\lib\libiar.lib [ reliar\SVSWITCH.rel ]\r
-..\..\lib\libcb.lib [ relcb\getpwent.rel ]\r
..\..\lib\libiar.lib [ reliar\ENTAUTODIRECT.rel ]\r
..\..\lib\libiar.lib [ reliar\VSWITCHEND.rel ]\r
+..\..\lib\libcb.lib [ relcb\atoi.rel ]\r
+..\..\lib\libcb.lib [ relcb\setpwent.rel ]\r
..\..\lib\libcb.lib [ relcb\vfprintf.rel ]\r
..\..\lib\libcb.lib [ relcb\ltoa.rel ]\r
..\..\lib\libiar.lib [ reliar\SSCMP.rel ]\r
..\..\lib\libsysb.lib [ relsysb\_exit.rel ]\r
..\..\lib\libiar.lib [ reliar\LEAVEDIRECT.rel ]\r
..\..\lib\libiar.lib [ reliar\LADDASG.rel ]\r
-..\..\lib\libcb.lib [ relcb\strtoul.rel ]\r
..\..\lib\libcb.lib [ relcb\fputc.rel ]\r
-..\..\lib\libcb.lib [ relcb\ctype.rel ]\r
..\..\lib\libcb.lib [ relcb\ultoa.rel ]\r
-..\..\lib\libiar.lib [ reliar\SSSWITCH.rel ]\r
-..\..\lib\libiar.lib [ reliar\SSWITCHEND.rel ]\r
+..\..\lib\libcb.lib [ relcb\strtol.rel ]\r
..\..\lib\libiar.lib [ reliar\ULDIVASG.rel ]\r
-..\..\lib\libcb.lib [ relcb\atoi.rel ]\r
+..\..\lib\libcb.lib [ relcb\getpwent.rel ]\r
..\..\lib\libiar.lib [ reliar\ULMOD.rel ]\r
..\..\lib\libiar.lib [ reliar\SFINDSIGN.rel ]\r
..\..\lib\libiar.lib [ reliar\ULDIV.rel ]\r
..\..\lib\libsysb.lib [ relsysb\sbrk.rel ]\r
..\..\lib\libiar.lib [ reliar\LNEG.rel ]\r
..\..\lib\libiar.lib [ reliar\LDIVMOD.rel ]\r
-..\..\lib\libiar.lib [ reliar\LMULASG.rel ]\r
-..\..\lib\libiar.lib [ reliar\LMUL.rel ]\r
..\..\lib\libiar.lib [ reliar\LNOT.rel ]\r
..\..\lib\libiar.lib [ reliar\LENDMULDIVASG.rel ]\r
-..\..\lib\libcb.lib [ relcb\strtol.rel ]\r
+..\..\lib\libcb.lib [ relcb\strtoul.rel ]\r
+..\..\lib\libcb.lib [ relcb\ctype.rel ]\r
+..\..\lib\libiar.lib [ reliar\SSSWITCH.rel ]\r
+..\..\lib\libiar.lib [ reliar\SSWITCHEND.rel ]\r
+..\..\lib\libiar.lib [ reliar\LMULASG.rel ]\r
+..\..\lib\libiar.lib [ reliar\LMUL.rel ]\r
\r
\r
User Base Address Definitions\r
lbuf[1]=disp->label[1];\r
lbuf[2]=0;\r
disp->label[0]=0;\r
- pwd = getpwnam(lbuf);\r
+ pwd = getpwuid(atoi(lbuf));\r
pbuf=disp->label+2;\r
if (pwd != NULL) {\r
salt[0] = pwd->pw_passwd[0];\r
--- /dev/null
+/* login.c\r
+ * descripton: login into a user account\r
+ * author: Alistair Riddoch\r
+ * modification: David Murn <scuffer@hups.apana.org.au>\r
+ * Added password entry\r
+ * modification: Shane Kerr <kerr@wizard.net>\r
+ * More work on password entry\r
+ */\r
+\r
+/* todo: add a timeout for serial and network logins */\r
+/* ??? need a signal mechanism (i.e. alarm() and SIGALRM) */\r
+/* real getpass() ! */\r
+\r
+#include <unistd.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <stdio.h>\r
+#include <pwd.h>\r
+#include <wnd.h>\r
+\r
+void login(pwd, argv)\r
+ struct passwd *pwd;\r
+ char **argv;\r
+{\r
+ char pname[64];\r
+ char *bname;\r
+\r
+#if 1 /* addition by Nick, please see linux manpage passwd.5 */\r
+ if (!*pwd->pw_shell)\r
+ {\r
+ pwd->pw_shell = "/bin/sh";\r
+ }\r
+#endif\r
+\r
+/* chown("/dev/tty",pwd->pw_uid,pwd->pw_gid); */\r
+ pname[0] = '-';\r
+ if ((bname = strrchr(pwd->pw_shell, '/')) != NULL)\r
+ bname++;\r
+ else bname = pwd->pw_shell;\r
+ strcpy(pname+1, bname);\r
+ argv[0] = pname;\r
+ argv[1] = NULL;\r
+ /* we must set first GID, because we're still root\r
+ if UID is set first and we aren't logging as root,\r
+ we won't have permission to change our GID */\r
+ setgid(pwd->pw_gid);\r
+ setuid(pwd->pw_uid);\r
+ chdir(pwd->pw_dir);\r
+ setenv("HOME", pwd->pw_dir, 1);\r
+ setenv("USER", pwd->pw_name, 1);\r
+ execv(pwd->pw_shell, argv);\r
+ perror(pwd->pw_shell);\r
+ exit(1);\r
+}\r
+\r
+void login_actionhandler(struct Component* this){\r
+ char lbuf[20], *pbuf, salt[3], *s;\r
+ struct passwd *pwd;\r
+ int n;\r
+ struct ActionXDS *act;\r
+ struct Component* disp=this;\r
+\r
+ act=(struct ActionXDS*) (this->xds);\r
+ if(act->action==0x0101){\r
+ lbuf[0]=disp->label[0];\r
+ lbuf[1]=disp->label[1];\r
+ lbuf[2]=0;\r
+ disp->label[0]=0;\r
+ pwd = getpwnam(lbuf);\r
+ pbuf=disp->label+2;\r
+ if (pwd != NULL) {\r
+ salt[0] = pwd->pw_passwd[0];\r
+ salt[1] = pwd->pw_passwd[1];\r
+ salt[2] = 0;\r
+ s = crypt(pbuf, salt);\r
+ if (!strcmp(s, pwd->pw_passwd)){\r
+ ClearScreen();\r
+ login(pwd, NULL);\r
+ }\r
+ }\r
+ disp->paint(disp);\r
+ }\r
+}\r
+\r
+void main(int argc, char** argv)\r
+{\r
+ GUIinit();\r
+ gui_globals()->actionhandler=login_actionhandler;\r
+ GUIgo("/wnd/logn.scr");\r
+ GUIunit();\r
+}\r
+\r
+\r
5 EXTERN GUIgo\r
6 EXTERN GUIinit\r
7 EXTERN GUIunit\r
- 8 EXTERN chdir\r
- 9 EXTERN crypt\r
- 10 EXTERN execv\r
- 11 EXTERN exit\r
- 12 EXTERN getpwnam\r
- 13 EXTERN gui_globals\r
- 14 PUBLIC login\r
- 15 PUBLIC login_actionhandler\r
- 16 PUBLIC main\r
- 17 EXTERN perror\r
- 18 EXTERN setenv\r
- 19 EXTERN setgid\r
- 20 EXTERN setuid\r
- 21 EXTERN strcmp\r
- 22 EXTERN strcpy\r
- 23 EXTERN strrchr\r
- 24 EXTERN ?CL64180B_4_06_L00\r
- 25 EXTERN ?BANK_CALL_DIRECT_L08\r
- 26 EXTERN ?BANK_LEAVE_DIRECT_L08\r
- 27 EXTERN ?BANK_FAST_LEAVE_L08\r
- 28 EXTERN ?ENT_PARM_DIRECT_L09\r
- 29 EXTERN ?ENT_AUTO_DIRECT_L09\r
- 30 RSEG CODE\r
- 00000000 31 login:\r
- 00000000 FD E5 32 PUSH IY\r
- 00000002 DD E5 33 PUSH IX\r
- 00000004 C5 34 PUSH BC\r
- 00000005 21 C0 FF 35 LD HL,65472\r
- 00000008 39 36 ADD HL,SP\r
- 00000009 F9 37 LD SP,HL\r
- 0000000A D5 38 PUSH DE\r
- 0000000B DD E1 39 POP IX\r
- 0000000D 21 0C 00 40 LD HL,12\r
- 00000010 19 41 ADD HL,DE\r
- 00000011 7E 42 LD A,(HL)\r
- 00000012 23 43 INC HL\r
- 00000013 66 44 LD H,(HL)\r
- 00000014 6F 45 LD L,A\r
- 00000015 AF 46 XOR A\r
- 00000016 B6 47 OR (HL)\r
- 00000017 20 08 48 JR NZ,?0001\r
- 00000019 49 ?0000:\r
- 00000019 DD 36 0C 00 50 LD (IX+12),LOW(?0002)\r
- 0000001D DD 36 0D 00 51 LD (IX+13),HIGH(?0002)\r
- 00000021 52 ?0001:\r
- 00000021 21 00 00 53 LD HL,0\r
- 00000024 39 54 ADD HL,SP\r
- 00000025 36 2D 55 LD (HL),45\r
- 00000027 01 2F 00 56 LD BC,47\r
- 0000002A DD 5E 0C 57 LD E,(IX+12)\r
- 0000002D DD 56 0D 58 LD D,(IX+13)\r
- 00000030 3E 00 59 LD A,BYTE3 strrchr\r
- 00000032 21 00 00 60 LD HL,LWRD strrchr\r
- 00000035 CD 00 00 61 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00000038 E5 62 PUSH HL\r
- 00000039 FD E1 63 POP IY\r
- 0000003B 7D 64 LD A,L\r
- 0000003C B4 65 OR H\r
- 0000003D 28 04 66 JR Z,?0004\r
- 0000003F 67 ?0003:\r
- 0000003F FD 23 68 INC IY\r
- 00000041 18 09 69 JR ?0005\r
- 00000043 70 ?0004:\r
- 00000043 DD 6E 0C 71 LD L,(IX+12)\r
- 00000046 DD 66 0D 72 LD H,(IX+13)\r
- 00000049 E5 73 PUSH HL\r
- 0000004A FD E1 74 POP IY\r
- 0000004C 75 ?0005:\r
- 0000004C FD E5 76 PUSH IY\r
- 0000004E C1 77 POP BC\r
- 0000004F 21 00 00 78 LD HL,0\r
- 00000052 39 79 ADD HL,SP\r
- 00000053 11 01 00 80 LD DE,1\r
- 00000056 19 81 ADD HL,DE\r
- 00000057 EB 82 EX DE,HL\r
- 00000058 3E 00 83 LD A,BYTE3 strcpy\r
- 0000005A 21 00 00 84 LD HL,LWRD strcpy\r
- 0000005D CD 00 00 85 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00000060 21 00 00 86 LD HL,0\r
- 00000063 39 87 ADD HL,SP\r
- 00000064 E5 88 PUSH HL\r
- 00000065 21 42 00 89 LD HL,66\r
- 00000068 39 90 ADD HL,SP\r
- 00000069 7E 91 LD A,(HL)\r
- 0000006A 23 92 INC HL\r
- 0000006B 66 93 LD H,(HL)\r
- 0000006C 6F 94 LD L,A\r
- 0000006D C1 95 POP BC\r
- 0000006E 71 96 LD (HL),C\r
- 0000006F 23 97 INC HL\r
- 00000070 70 98 LD (HL),B\r
- 00000071 21 40 00 99 LD HL,64\r
- 00000074 39 100 ADD HL,SP\r
- 00000075 47 101 LD B,A\r
- 00000076 23 102 INC HL\r
- 00000077 66 103 LD H,(HL)\r
- 00000078 68 104 LD L,B\r
- 00000079 23 105 INC HL\r
- 0000007A 23 106 INC HL\r
- 0000007B AF 107 XOR A\r
- 0000007C 77 108 LD (HL),A\r
- 0000007D 23 109 INC HL\r
- 0000007E 77 110 LD (HL),A\r
- 0000007F DD 5E 06 111 LD E,(IX+6)\r
- 00000082 DD 56 07 112 LD D,(IX+7)\r
- 00000085 3E 00 113 LD A,BYTE3 setgid\r
- 00000087 21 00 00 114 LD HL,LWRD setgid\r
- 0000008A CD 00 00 115 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000008D DD 5E 04 116 LD E,(IX+4)\r
- 00000090 DD 56 05 117 LD D,(IX+5)\r
- 00000093 3E 00 118 LD A,BYTE3 setuid\r
- 00000095 21 00 00 119 LD HL,LWRD setuid\r
- 00000098 CD 00 00 120 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000009B DD 5E 0A 121 LD E,(IX+10)\r
- 0000009E DD 56 0B 122 LD D,(IX+11)\r
- 000000A1 3E 00 123 LD A,BYTE3 chdir\r
- 000000A3 21 00 00 124 LD HL,LWRD chdir\r
- 000000A6 CD 00 00 125 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000000A9 21 01 00 126 LD HL,1\r
- 000000AC E5 127 PUSH HL\r
- 000000AD DD 4E 0A 128 LD C,(IX+10)\r
- 000000B0 DD 46 0B 129 LD B,(IX+11)\r
- 000000B3 11 08 00 130 LD DE,?0006\r
- 000000B6 3E 00 131 LD A,BYTE3 setenv\r
- 000000B8 21 00 00 132 LD HL,LWRD setenv\r
- 000000BB CD 00 00 133 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000000BE F1 134 POP AF\r
- 000000BF 21 01 00 135 LD HL,1\r
- 000000C2 E5 136 PUSH HL\r
- 000000C3 DD 4E 00 137 LD C,(IX+0)\r
- 000000C6 DD 46 01 138 LD B,(IX+1)\r
- 000000C9 11 0D 00 139 LD DE,?0007\r
- 000000CC 3E 00 140 LD A,BYTE3 setenv\r
- 000000CE 21 00 00 141 LD HL,LWRD setenv\r
- 000000D1 CD 00 00 142 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000000D4 F1 143 POP AF\r
- 000000D5 21 40 00 144 LD HL,64\r
- 000000D8 39 145 ADD HL,SP\r
- 000000D9 4E 146 LD C,(HL)\r
- 000000DA 23 147 INC HL\r
- 000000DB 46 148 LD B,(HL)\r
- 000000DC DD 5E 0C 149 LD E,(IX+12)\r
- 000000DF DD 56 0D 150 LD D,(IX+13)\r
- 000000E2 3E 00 151 LD A,BYTE3 execv\r
- 000000E4 21 00 00 152 LD HL,LWRD execv\r
- 000000E7 CD 00 00 153 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000000EA DD 5E 0C 154 LD E,(IX+12)\r
- 000000ED DD 56 0D 155 LD D,(IX+13)\r
- 000000F0 3E 00 156 LD A,BYTE3 perror\r
- 000000F2 21 00 00 157 LD HL,LWRD perror\r
- 000000F5 CD 00 00 158 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000000F8 11 01 00 159 LD DE,1\r
- 000000FB 3E 00 160 LD A,BYTE3 exit\r
- 000000FD 21 00 00 161 LD HL,LWRD exit\r
- 00000100 CD 00 00 162 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00000103 21 42 00 163 LD HL,66\r
- 00000106 39 164 ADD HL,SP\r
- 00000107 F9 165 LD SP,HL\r
- 00000108 DD E1 166 POP IX\r
- 0000010A FD E1 167 POP IY\r
- 0000010C C3 00 00 168 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 0000010F 169 login_actionhandler:\r
- 0000010F CD 00 00 170 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00000112 E0 FF 171 DEFW -32\r
- 00000114 FD E5 172 PUSH IY\r
- 00000116 DD 6E 02 173 LD L,(IX+2)\r
- 00000119 DD 66 03 174 LD H,(IX+3)\r
- 0000011C E5 175 PUSH HL\r
- 0000011D FD E1 176 POP IY\r
- 0000011F 21 26 00 177 LD HL,38\r
- 00000122 DD 4E 02 178 LD C,(IX+2)\r
- 00000125 DD 46 03 179 LD B,(IX+3)\r
- 00000128 09 180 ADD HL,BC\r
- 00000129 46 181 LD B,(HL)\r
- 0000012A 23 182 INC HL\r
- 0000012B 66 183 LD H,(HL)\r
- 0000012C 68 184 LD L,B\r
- 0000012D 23 185 INC HL\r
- 0000012E 23 186 INC HL\r
- 0000012F 23 187 INC HL\r
- 00000130 46 188 LD B,(HL)\r
- 00000131 23 189 INC HL\r
- 00000132 66 190 LD H,(HL)\r
- 00000133 68 191 LD L,B\r
- 00000134 01 01 01 192 LD BC,257\r
- 00000137 A7 193 AND A\r
- 00000138 ED 42 194 SBC HL,BC\r
- 0000013A C2 03 02 195 JP NZ,?0009\r
- 0000013D 196 ?0008:\r
- 0000013D FD 6E 20 197 LD L,(IY+32)\r
- 00000140 FD 66 21 198 LD H,(IY+33)\r
- 00000143 46 199 LD B,(HL)\r
- 00000144 DD 70 EC 200 LD (IX-20),B\r
- 00000147 FD 6E 20 201 LD L,(IY+32)\r
- 0000014A FD 66 21 202 LD H,(IY+33)\r
- 0000014D 23 203 INC HL\r
- 0000014E 46 204 LD B,(HL)\r
- 0000014F DD 70 ED 205 LD (IX-19),B\r
- 00000152 DD 36 EE 00 206 LD (IX-18),0\r
- 00000156 FD 6E 20 207 LD L,(IY+32)\r
- 00000159 FD 66 21 208 LD H,(IY+33)\r
- 0000015C 36 00 209 LD (HL),0\r
- 0000015E 21 0E 00 210 LD HL,14\r
- 00000161 39 211 ADD HL,SP\r
- 00000162 EB 212 EX DE,HL\r
- 00000163 3E 00 213 LD A,BYTE3 getpwnam\r
- 00000165 21 00 00 214 LD HL,LWRD getpwnam\r
- 00000168 CD 00 00 215 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000016B DD 75 E0 216 LD (IX-32),L\r
- 0000016E DD 74 E1 217 LD (IX-31),H\r
- 00000171 FD 4E 20 218 LD C,(IY+32)\r
- 00000174 FD 46 21 219 LD B,(IY+33)\r
- 00000177 03 220 INC BC\r
- 00000178 03 221 INC BC\r
- 00000179 DD 71 EA 222 LD (IX-22),C\r
- 0000017C DD 70 EB 223 LD (IX-21),B\r
- 0000017F 7D 224 LD A,L\r
- 00000180 B4 225 OR H\r
- 00000181 28 71 226 JR Z,?0013\r
- 00000183 227 ?0010:\r
- 00000183 23 228 INC HL\r
- 00000184 23 229 INC HL\r
- 00000185 7E 230 LD A,(HL)\r
- 00000186 23 231 INC HL\r
- 00000187 66 232 LD H,(HL)\r
- 00000188 6F 233 LD L,A\r
- 00000189 46 234 LD B,(HL)\r
- 0000018A DD 70 E2 235 LD (IX-30),B\r
- 0000018D DD 6E E0 236 LD L,(IX-32)\r
- 00000190 DD 66 E1 237 LD H,(IX-31)\r
- 00000193 23 238 INC HL\r
- 00000194 23 239 INC HL\r
- 00000195 46 240 LD B,(HL)\r
- 00000196 23 241 INC HL\r
- 00000197 66 242 LD H,(HL)\r
- 00000198 68 243 LD L,B\r
- 00000199 23 244 INC HL\r
- 0000019A 46 245 LD B,(HL)\r
- 0000019B DD 70 E3 246 LD (IX-29),B\r
- 0000019E DD 36 E4 00 247 LD (IX-28),0\r
- 000001A2 21 04 00 248 LD HL,4\r
- 000001A5 39 249 ADD HL,SP\r
- 000001A6 4D 250 LD C,L\r
- 000001A7 44 251 LD B,H\r
- 000001A8 DD 5E EA 252 LD E,(IX-22)\r
- 000001AB DD 56 EB 253 LD D,(IX-21)\r
- 000001AE 3E 00 254 LD A,BYTE3 crypt\r
- 000001B0 21 00 00 255 LD HL,LWRD crypt\r
- 000001B3 CD 00 00 256 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000001B6 DD 75 E8 257 LD (IX-24),L\r
- 000001B9 DD 74 E9 258 LD (IX-23),H\r
- 000001BC DD 4E E0 259 LD C,(IX-32)\r
- 000001BF DD 46 E1 260 LD B,(IX-31)\r
- 000001C2 03 261 INC BC\r
- 000001C3 03 262 INC BC\r
- 000001C4 69 263 LD L,C\r
- 000001C5 60 264 LD H,B\r
- 000001C6 4E 265 LD C,(HL)\r
- 000001C7 23 266 INC HL\r
- 000001C8 46 267 LD B,(HL)\r
- 000001C9 DD 5E E8 268 LD E,(IX-24)\r
- 000001CC DD 56 E9 269 LD D,(IX-23)\r
- 000001CF 3E 00 270 LD A,BYTE3 strcmp\r
- 000001D1 21 00 00 271 LD HL,LWRD strcmp\r
- 000001D4 CD 00 00 272 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000001D7 7D 273 LD A,L\r
- 000001D8 B4 274 OR H\r
- 000001D9 20 19 275 JR NZ,?0013\r
- 000001DB 276 ?0012:\r
- 000001DB 3E 00 277 LD A,BYTE3 ClearScreen\r
- 000001DD 21 00 00 278 LD HL,LWRD ClearScreen\r
- 000001E0 CD 00 00 279 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000001E3 01 00 00 280 LD BC,0\r
- 000001E6 DD 5E E0 281 LD E,(IX-32)\r
- 000001E9 DD 56 E1 282 LD D,(IX-31)\r
- 000001EC 3E 00 283 LD A,BYTE3 login\r
- 000001EE 21 00 00 284 LD HL,LWRD login\r
- 000001F1 CD 00 00 285 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000001F4 286 ?0013:\r
- 000001F4 287 ?0011:\r
- 000001F4 FD E5 288 PUSH IY\r
- 000001F6 D1 289 POP DE\r
- 000001F7 FD 7E 1C 290 LD A,(IY+28)\r
- 000001FA FD 6E 1A 291 LD L,(IY+26)\r
- 000001FD FD 66 1B 292 LD H,(IY+27)\r
- 00000200 CD 00 00 293 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00000203 294 ?0009:\r
- 00000203 FD E1 295 POP IY\r
- 00000205 C3 00 00 296 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00000208 297 main:\r
- 00000208 CD 00 00 298 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 0000020B 3E 00 299 LD A,BYTE3 GUIinit\r
- 0000020D 21 00 00 300 LD HL,LWRD GUIinit\r
- 00000210 CD 00 00 301 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00000213 3E 00 302 LD A,BYTE3 gui_globals\r
- 00000215 21 00 00 303 LD HL,LWRD gui_globals\r
- 00000218 CD 00 00 304 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000021B 01 10 00 305 LD BC,16\r
- 0000021E 09 306 ADD HL,BC\r
- 0000021F 36 0F 307 LD (HL),LOW(login_actionhandler)\r
- 00000221 23 308 INC HL\r
- 00000222 36 01 309 LD (HL),HIGH(login_actionhandler)\r
- 00000224 23 310 INC HL\r
- 00000225 36 0F 311 LD (HL),BYTE3 login_actionhandler\r
- 00000227 11 12 00 312 LD DE,?0014\r
- 0000022A 3E 00 313 LD A,BYTE3 GUIgo\r
- 0000022C 21 00 00 314 LD HL,LWRD GUIgo\r
- 0000022F CD 00 00 315 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00000232 3E 00 316 LD A,BYTE3 GUIunit\r
- 00000234 21 00 00 317 LD HL,LWRD GUIunit\r
- 00000237 CD 00 00 318 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000023A C3 00 00 319 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 320 RSEG CSTR\r
- 00000000 321 ?0002:\r
- 00000000 2F 62 69 6E 2F 73 68 322 DEFB '/bin/sh'\r
- 00000007 00 323 DEFB 0\r
- 00000008 324 ?0006:\r
- 00000008 48 4F 4D 45 325 DEFB 'HOME'\r
- 0000000C 00 326 DEFB 0\r
- 0000000D 327 ?0007:\r
- 0000000D 55 53 45 52 328 DEFB 'USER'\r
- 00000011 00 329 DEFB 0\r
- 00000012 330 ?0014:\r
- 00000012 2F 77 6E 64 2F 6C 6F 331 DEFB '/wnd/logn.scr'\r
+ 8 EXTERN atoi\r
+ 9 EXTERN chdir\r
+ 10 EXTERN crypt\r
+ 11 EXTERN execv\r
+ 12 EXTERN exit\r
+ 13 EXTERN getpwuid\r
+ 14 EXTERN gui_globals\r
+ 15 PUBLIC login\r
+ 16 PUBLIC login_actionhandler\r
+ 17 PUBLIC main\r
+ 18 EXTERN perror\r
+ 19 EXTERN setenv\r
+ 20 EXTERN setgid\r
+ 21 EXTERN setuid\r
+ 22 EXTERN strcmp\r
+ 23 EXTERN strcpy\r
+ 24 EXTERN strrchr\r
+ 25 EXTERN ?CL64180B_4_06_L00\r
+ 26 EXTERN ?BANK_CALL_DIRECT_L08\r
+ 27 EXTERN ?BANK_LEAVE_DIRECT_L08\r
+ 28 EXTERN ?BANK_FAST_LEAVE_L08\r
+ 29 EXTERN ?ENT_PARM_DIRECT_L09\r
+ 30 EXTERN ?ENT_AUTO_DIRECT_L09\r
+ 31 RSEG CODE\r
+ 00000000 32 login:\r
+ 00000000 FD E5 33 PUSH IY\r
+ 00000002 DD E5 34 PUSH IX\r
+ 00000004 C5 35 PUSH BC\r
+ 00000005 21 C0 FF 36 LD HL,65472\r
+ 00000008 39 37 ADD HL,SP\r
+ 00000009 F9 38 LD SP,HL\r
+ 0000000A D5 39 PUSH DE\r
+ 0000000B DD E1 40 POP IX\r
+ 0000000D 21 0C 00 41 LD HL,12\r
+ 00000010 19 42 ADD HL,DE\r
+ 00000011 7E 43 LD A,(HL)\r
+ 00000012 23 44 INC HL\r
+ 00000013 66 45 LD H,(HL)\r
+ 00000014 6F 46 LD L,A\r
+ 00000015 AF 47 XOR A\r
+ 00000016 B6 48 OR (HL)\r
+ 00000017 20 08 49 JR NZ,?0001\r
+ 00000019 50 ?0000:\r
+ 00000019 DD 36 0C 00 51 LD (IX+12),LOW(?0002)\r
+ 0000001D DD 36 0D 00 52 LD (IX+13),HIGH(?0002)\r
+ 00000021 53 ?0001:\r
+ 00000021 21 00 00 54 LD HL,0\r
+ 00000024 39 55 ADD HL,SP\r
+ 00000025 36 2D 56 LD (HL),45\r
+ 00000027 01 2F 00 57 LD BC,47\r
+ 0000002A DD 5E 0C 58 LD E,(IX+12)\r
+ 0000002D DD 56 0D 59 LD D,(IX+13)\r
+ 00000030 3E 00 60 LD A,BYTE3 strrchr\r
+ 00000032 21 00 00 61 LD HL,LWRD strrchr\r
+ 00000035 CD 00 00 62 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00000038 E5 63 PUSH HL\r
+ 00000039 FD E1 64 POP IY\r
+ 0000003B 7D 65 LD A,L\r
+ 0000003C B4 66 OR H\r
+ 0000003D 28 04 67 JR Z,?0004\r
+ 0000003F 68 ?0003:\r
+ 0000003F FD 23 69 INC IY\r
+ 00000041 18 09 70 JR ?0005\r
+ 00000043 71 ?0004:\r
+ 00000043 DD 6E 0C 72 LD L,(IX+12)\r
+ 00000046 DD 66 0D 73 LD H,(IX+13)\r
+ 00000049 E5 74 PUSH HL\r
+ 0000004A FD E1 75 POP IY\r
+ 0000004C 76 ?0005:\r
+ 0000004C FD E5 77 PUSH IY\r
+ 0000004E C1 78 POP BC\r
+ 0000004F 21 00 00 79 LD HL,0\r
+ 00000052 39 80 ADD HL,SP\r
+ 00000053 11 01 00 81 LD DE,1\r
+ 00000056 19 82 ADD HL,DE\r
+ 00000057 EB 83 EX DE,HL\r
+ 00000058 3E 00 84 LD A,BYTE3 strcpy\r
+ 0000005A 21 00 00 85 LD HL,LWRD strcpy\r
+ 0000005D CD 00 00 86 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00000060 21 00 00 87 LD HL,0\r
+ 00000063 39 88 ADD HL,SP\r
+ 00000064 E5 89 PUSH HL\r
+ 00000065 21 42 00 90 LD HL,66\r
+ 00000068 39 91 ADD HL,SP\r
+ 00000069 7E 92 LD A,(HL)\r
+ 0000006A 23 93 INC HL\r
+ 0000006B 66 94 LD H,(HL)\r
+ 0000006C 6F 95 LD L,A\r
+ 0000006D C1 96 POP BC\r
+ 0000006E 71 97 LD (HL),C\r
+ 0000006F 23 98 INC HL\r
+ 00000070 70 99 LD (HL),B\r
+ 00000071 21 40 00 100 LD HL,64\r
+ 00000074 39 101 ADD HL,SP\r
+ 00000075 47 102 LD B,A\r
+ 00000076 23 103 INC HL\r
+ 00000077 66 104 LD H,(HL)\r
+ 00000078 68 105 LD L,B\r
+ 00000079 23 106 INC HL\r
+ 0000007A 23 107 INC HL\r
+ 0000007B AF 108 XOR A\r
+ 0000007C 77 109 LD (HL),A\r
+ 0000007D 23 110 INC HL\r
+ 0000007E 77 111 LD (HL),A\r
+ 0000007F DD 5E 06 112 LD E,(IX+6)\r
+ 00000082 DD 56 07 113 LD D,(IX+7)\r
+ 00000085 3E 00 114 LD A,BYTE3 setgid\r
+ 00000087 21 00 00 115 LD HL,LWRD setgid\r
+ 0000008A CD 00 00 116 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000008D DD 5E 04 117 LD E,(IX+4)\r
+ 00000090 DD 56 05 118 LD D,(IX+5)\r
+ 00000093 3E 00 119 LD A,BYTE3 setuid\r
+ 00000095 21 00 00 120 LD HL,LWRD setuid\r
+ 00000098 CD 00 00 121 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000009B DD 5E 0A 122 LD E,(IX+10)\r
+ 0000009E DD 56 0B 123 LD D,(IX+11)\r
+ 000000A1 3E 00 124 LD A,BYTE3 chdir\r
+ 000000A3 21 00 00 125 LD HL,LWRD chdir\r
+ 000000A6 CD 00 00 126 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000000A9 21 01 00 127 LD HL,1\r
+ 000000AC E5 128 PUSH HL\r
+ 000000AD DD 4E 0A 129 LD C,(IX+10)\r
+ 000000B0 DD 46 0B 130 LD B,(IX+11)\r
+ 000000B3 11 08 00 131 LD DE,?0006\r
+ 000000B6 3E 00 132 LD A,BYTE3 setenv\r
+ 000000B8 21 00 00 133 LD HL,LWRD setenv\r
+ 000000BB CD 00 00 134 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000000BE F1 135 POP AF\r
+ 000000BF 21 01 00 136 LD HL,1\r
+ 000000C2 E5 137 PUSH HL\r
+ 000000C3 DD 4E 00 138 LD C,(IX+0)\r
+ 000000C6 DD 46 01 139 LD B,(IX+1)\r
+ 000000C9 11 0D 00 140 LD DE,?0007\r
+ 000000CC 3E 00 141 LD A,BYTE3 setenv\r
+ 000000CE 21 00 00 142 LD HL,LWRD setenv\r
+ 000000D1 CD 00 00 143 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000000D4 F1 144 POP AF\r
+ 000000D5 21 40 00 145 LD HL,64\r
+ 000000D8 39 146 ADD HL,SP\r
+ 000000D9 4E 147 LD C,(HL)\r
+ 000000DA 23 148 INC HL\r
+ 000000DB 46 149 LD B,(HL)\r
+ 000000DC DD 5E 0C 150 LD E,(IX+12)\r
+ 000000DF DD 56 0D 151 LD D,(IX+13)\r
+ 000000E2 3E 00 152 LD A,BYTE3 execv\r
+ 000000E4 21 00 00 153 LD HL,LWRD execv\r
+ 000000E7 CD 00 00 154 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000000EA DD 5E 0C 155 LD E,(IX+12)\r
+ 000000ED DD 56 0D 156 LD D,(IX+13)\r
+ 000000F0 3E 00 157 LD A,BYTE3 perror\r
+ 000000F2 21 00 00 158 LD HL,LWRD perror\r
+ 000000F5 CD 00 00 159 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000000F8 11 01 00 160 LD DE,1\r
+ 000000FB 3E 00 161 LD A,BYTE3 exit\r
+ 000000FD 21 00 00 162 LD HL,LWRD exit\r
+ 00000100 CD 00 00 163 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00000103 21 42 00 164 LD HL,66\r
+ 00000106 39 165 ADD HL,SP\r
+ 00000107 F9 166 LD SP,HL\r
+ 00000108 DD E1 167 POP IX\r
+ 0000010A FD E1 168 POP IY\r
+ 0000010C C3 00 00 169 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 0000010F 170 login_actionhandler:\r
+ 0000010F CD 00 00 171 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00000112 E0 FF 172 DEFW -32\r
+ 00000114 FD E5 173 PUSH IY\r
+ 00000116 DD 6E 02 174 LD L,(IX+2)\r
+ 00000119 DD 66 03 175 LD H,(IX+3)\r
+ 0000011C E5 176 PUSH HL\r
+ 0000011D FD E1 177 POP IY\r
+ 0000011F 21 26 00 178 LD HL,38\r
+ 00000122 DD 4E 02 179 LD C,(IX+2)\r
+ 00000125 DD 46 03 180 LD B,(IX+3)\r
+ 00000128 09 181 ADD HL,BC\r
+ 00000129 46 182 LD B,(HL)\r
+ 0000012A 23 183 INC HL\r
+ 0000012B 66 184 LD H,(HL)\r
+ 0000012C 68 185 LD L,B\r
+ 0000012D 23 186 INC HL\r
+ 0000012E 23 187 INC HL\r
+ 0000012F 23 188 INC HL\r
+ 00000130 46 189 LD B,(HL)\r
+ 00000131 23 190 INC HL\r
+ 00000132 66 191 LD H,(HL)\r
+ 00000133 68 192 LD L,B\r
+ 00000134 01 01 01 193 LD BC,257\r
+ 00000137 A7 194 AND A\r
+ 00000138 ED 42 195 SBC HL,BC\r
+ 0000013A C2 0C 02 196 JP NZ,?0009\r
+ 0000013D 197 ?0008:\r
+ 0000013D FD 6E 20 198 LD L,(IY+32)\r
+ 00000140 FD 66 21 199 LD H,(IY+33)\r
+ 00000143 46 200 LD B,(HL)\r
+ 00000144 DD 70 EC 201 LD (IX-20),B\r
+ 00000147 FD 6E 20 202 LD L,(IY+32)\r
+ 0000014A FD 66 21 203 LD H,(IY+33)\r
+ 0000014D 23 204 INC HL\r
+ 0000014E 46 205 LD B,(HL)\r
+ 0000014F DD 70 ED 206 LD (IX-19),B\r
+ 00000152 DD 36 EE 00 207 LD (IX-18),0\r
+ 00000156 FD 6E 20 208 LD L,(IY+32)\r
+ 00000159 FD 66 21 209 LD H,(IY+33)\r
+ 0000015C 36 00 210 LD (HL),0\r
+ 0000015E 21 0E 00 211 LD HL,14\r
+ 00000161 39 212 ADD HL,SP\r
+ 00000162 EB 213 EX DE,HL\r
+ 00000163 3E 00 214 LD A,BYTE3 atoi\r
+ 00000165 21 00 00 215 LD HL,LWRD atoi\r
+ 00000168 CD 00 00 216 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000016B EB 217 EX DE,HL\r
+ 0000016C 3E 00 218 LD A,BYTE3 getpwuid\r
+ 0000016E 21 00 00 219 LD HL,LWRD getpwuid\r
+ 00000171 CD 00 00 220 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00000174 DD 75 E0 221 LD (IX-32),L\r
+ 00000177 DD 74 E1 222 LD (IX-31),H\r
+ 0000017A FD 4E 20 223 LD C,(IY+32)\r
+ 0000017D FD 46 21 224 LD B,(IY+33)\r
+ 00000180 03 225 INC BC\r
+ 00000181 03 226 INC BC\r
+ 00000182 DD 71 EA 227 LD (IX-22),C\r
+ 00000185 DD 70 EB 228 LD (IX-21),B\r
+ 00000188 7D 229 LD A,L\r
+ 00000189 B4 230 OR H\r
+ 0000018A 28 71 231 JR Z,?0013\r
+ 0000018C 232 ?0010:\r
+ 0000018C 23 233 INC HL\r
+ 0000018D 23 234 INC HL\r
+ 0000018E 7E 235 LD A,(HL)\r
+ 0000018F 23 236 INC HL\r
+ 00000190 66 237 LD H,(HL)\r
+ 00000191 6F 238 LD L,A\r
+ 00000192 46 239 LD B,(HL)\r
+ 00000193 DD 70 E2 240 LD (IX-30),B\r
+ 00000196 DD 6E E0 241 LD L,(IX-32)\r
+ 00000199 DD 66 E1 242 LD H,(IX-31)\r
+ 0000019C 23 243 INC HL\r
+ 0000019D 23 244 INC HL\r
+ 0000019E 46 245 LD B,(HL)\r
+ 0000019F 23 246 INC HL\r
+ 000001A0 66 247 LD H,(HL)\r
+ 000001A1 68 248 LD L,B\r
+ 000001A2 23 249 INC HL\r
+ 000001A3 46 250 LD B,(HL)\r
+ 000001A4 DD 70 E3 251 LD (IX-29),B\r
+ 000001A7 DD 36 E4 00 252 LD (IX-28),0\r
+ 000001AB 21 04 00 253 LD HL,4\r
+ 000001AE 39 254 ADD HL,SP\r
+ 000001AF 4D 255 LD C,L\r
+ 000001B0 44 256 LD B,H\r
+ 000001B1 DD 5E EA 257 LD E,(IX-22)\r
+ 000001B4 DD 56 EB 258 LD D,(IX-21)\r
+ 000001B7 3E 00 259 LD A,BYTE3 crypt\r
+ 000001B9 21 00 00 260 LD HL,LWRD crypt\r
+ 000001BC CD 00 00 261 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000001BF DD 75 E8 262 LD (IX-24),L\r
+ 000001C2 DD 74 E9 263 LD (IX-23),H\r
+ 000001C5 DD 4E E0 264 LD C,(IX-32)\r
+ 000001C8 DD 46 E1 265 LD B,(IX-31)\r
+ 000001CB 03 266 INC BC\r
+ 000001CC 03 267 INC BC\r
+ 000001CD 69 268 LD L,C\r
+ 000001CE 60 269 LD H,B\r
+ 000001CF 4E 270 LD C,(HL)\r
+ 000001D0 23 271 INC HL\r
+ 000001D1 46 272 LD B,(HL)\r
+ 000001D2 DD 5E E8 273 LD E,(IX-24)\r
+ 000001D5 DD 56 E9 274 LD D,(IX-23)\r
+ 000001D8 3E 00 275 LD A,BYTE3 strcmp\r
+ 000001DA 21 00 00 276 LD HL,LWRD strcmp\r
+ 000001DD CD 00 00 277 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000001E0 7D 278 LD A,L\r
+ 000001E1 B4 279 OR H\r
+ 000001E2 20 19 280 JR NZ,?0013\r
+ 000001E4 281 ?0012:\r
+ 000001E4 3E 00 282 LD A,BYTE3 ClearScreen\r
+ 000001E6 21 00 00 283 LD HL,LWRD ClearScreen\r
+ 000001E9 CD 00 00 284 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000001EC 01 00 00 285 LD BC,0\r
+ 000001EF DD 5E E0 286 LD E,(IX-32)\r
+ 000001F2 DD 56 E1 287 LD D,(IX-31)\r
+ 000001F5 3E 00 288 LD A,BYTE3 login\r
+ 000001F7 21 00 00 289 LD HL,LWRD login\r
+ 000001FA CD 00 00 290 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000001FD 291 ?0013:\r
+ 000001FD 292 ?0011:\r
+ 000001FD FD E5 293 PUSH IY\r
+ 000001FF D1 294 POP DE\r
+ 00000200 FD 7E 1C 295 LD A,(IY+28)\r
+ 00000203 FD 6E 1A 296 LD L,(IY+26)\r
+ 00000206 FD 66 1B 297 LD H,(IY+27)\r
+ 00000209 CD 00 00 298 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000020C 299 ?0009:\r
+ 0000020C FD E1 300 POP IY\r
+ 0000020E C3 00 00 301 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00000211 302 main:\r
+ 00000211 CD 00 00 303 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00000214 3E 00 304 LD A,BYTE3 GUIinit\r
+ 00000216 21 00 00 305 LD HL,LWRD GUIinit\r
+ 00000219 CD 00 00 306 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000021C 3E 00 307 LD A,BYTE3 gui_globals\r
+ 0000021E 21 00 00 308 LD HL,LWRD gui_globals\r
+ 00000221 CD 00 00 309 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00000224 01 10 00 310 LD BC,16\r
+ 00000227 09 311 ADD HL,BC\r
+ 00000228 36 0F 312 LD (HL),LOW(login_actionhandler)\r
+ 0000022A 23 313 INC HL\r
+ 0000022B 36 01 314 LD (HL),HIGH(login_actionhandler)\r
+ 0000022D 23 315 INC HL\r
+ 0000022E 36 0F 316 LD (HL),BYTE3 login_actionhandler\r
+ 00000230 11 12 00 317 LD DE,?0014\r
+ 00000233 3E 00 318 LD A,BYTE3 GUIgo\r
+ 00000235 21 00 00 319 LD HL,LWRD GUIgo\r
+ 00000238 CD 00 00 320 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000023B 3E 00 321 LD A,BYTE3 GUIunit\r
+ 0000023D 21 00 00 322 LD HL,LWRD GUIunit\r
+ 00000240 CD 00 00 323 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00000243 C3 00 00 324 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 325 RSEG CSTR\r
+ 00000000 326 ?0002:\r
+ 00000000 2F 62 69 6E 2F 73 68 327 DEFB '/bin/sh'\r
+ 00000007 00 328 DEFB 0\r
+ 00000008 329 ?0006:\r
+ 00000008 48 4F 4D 45 330 DEFB 'HOME'\r
+ 0000000C 00 331 DEFB 0\r
+ 0000000D 332 ?0007:\r
+ 0000000D 55 53 45 52 333 DEFB 'USER'\r
+ 00000011 00 334 DEFB 0\r
+ 00000012 335 ?0014:\r
+ 00000012 2F 77 6E 64 2F 6C 6F 336 DEFB '/wnd/logn.scr'\r
67 6E 2E 73 63 72\r
- 0000001F 00 332 DEFB 0\r
- 00000020 333 END\r
+ 0000001F 00 337 DEFB 0\r
+ 00000020 338 END\r
\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1.\r
Hexadecimal [32-Bits]\r
\r
1 ?0003 0000003F R | 1 ?0004 00000043 R\r
1 ?0005 0000004C R | 2 ?0006 00000008 R\r
2 ?0007 0000000D R | 1 ?0008 0000013D R\r
- 1 ?0009 00000203 R | 1 ?0010 00000183 R\r
- 1 ?0011 000001F4 R | 1 ?0012 000001DB R\r
- 1 ?0013 000001F4 R | 2 ?0014 00000012 R\r
+ 1 ?0009 0000020C R | 1 ?0010 0000018C R\r
+ 1 ?0011 000001FD R | 1 ?0012 000001E4 R\r
+ 1 ?0013 000001FD R | 2 ?0014 00000012 R\r
?BANK_CALL_DIR ******** GX | ?BANK_FAST_LEA ******** GX\r
?BANK_LEAVE_DI ******** GX | ?CL64180B_4_06 ******** GX\r
?ENT_AUTO_DIRE ******** GX | ?ENT_PARM_DIRE ******** GX\r
ClearScreen ******** GX | GUIgo ******** GX\r
GUIinit ******** GX | GUIunit ******** GX\r
- chdir ******** GX | crypt ******** GX\r
- execv ******** GX | exit ******** GX\r
- getpwnam ******** GX | gui_globals ******** GX\r
- 1 login 00000000 GR | 1 login_actionha 0000010F GR\r
- 1 main 00000208 GR | perror ******** GX\r
- setenv ******** GX | setgid ******** GX\r
- setuid ******** GX | strcmp ******** GX\r
- strcpy ******** GX | strrchr ******** GX\r
-\r
+ atoi ******** GX | chdir ******** GX\r
+ crypt ******** GX | execv ******** GX\r
+ exit ******** GX | getpwuid ******** GX\r
+ gui_globals ******** GX | 1 login 00000000 GR\r
+ 1 login_actionha 0000010F GR | 1 main 00000211 GR\r
+ perror ******** GX | setenv ******** GX\r
+ setgid ******** GX | setuid ******** GX\r
+ strcmp ******** GX | strcpy ******** GX\r
+ strrchr ******** GX\r
\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2.\r
Hexadecimal [32-Bits]\r
\r
Area Table\r
\r
0 _DEFAULT size 0 flags 0\r
- 1 CODE size 23D flags 0\r
+ 1 CODE size 246 flags 0\r
2 CSTR size 20 flags 0\r
XL4\r
-H 3 areas 1B global symbols\r
+H 3 areas 1C global symbols\r
M login\r
S setgid Ref00000000\r
S GUIunit Ref00000000\r
S GUIgo Ref00000000\r
S ?ENT_PARM_DIRECT_L09 Ref00000000\r
S ?BANK_CALL_DIRECT_L08 Ref00000000\r
-S getpwnam Ref00000000\r
S strcpy Ref00000000\r
+S getpwuid Ref00000000\r
S ?ENT_AUTO_DIRECT_L09 Ref00000000\r
+S atoi Ref00000000\r
S crypt Ref00000000\r
S ?CL64180B_4_06_L00 Ref00000000\r
S GUIinit Ref00000000\r
S exit Ref00000000\r
S .__.ABS. Def00000000\r
A _DEFAULT size 0 flags 0\r
-A CODE size 23D flags 0\r
+A CODE size 246 flags 0\r
S login_actionhandler Def0000010F\r
S login Def00000000\r
-S main Def00000208\r
+S main Def00000211\r
A CSTR size 20 flags 0\r
T 00 00 00 00\r
R 00 00 01 00\r
T 4C 00 00 00 FD E5 C1 21 00 00 39 11 01 00 19\r
R 00 00 01 00\r
T 57 00 00 00 EB 3E 00 00 00 00 21 00 00 00 00\r
-R 00 00 01 00 2B 06 11 00 02 0B 11 00\r
+R 00 00 01 00 2B 06 10 00 02 0B 10 00\r
T 5D 00 00 00 CD 00 00 00 00 21 00 00 39 E5 21\r
R 00 00 01 00 02 05 0F 00\r
T 66 00 00 00 42 00 39 7E 23 66 6F C1 71 23 70\r
T F6 00 00 00 00 00 00 00 11 01 00 3E\r
R 00 00 01 00 02 04 0F 00\r
T FC 00 00 00 00 00 00 00 21 00 00 00 00 CD\r
-R 00 00 01 00 2B 04 16 00 02 09 16 00\r
+R 00 00 01 00 2B 04 17 00 02 09 17 00\r
T 01 01 00 00 00 00 00 00 21 42 00 39 F9 DD E1\r
R 00 00 01 00 02 04 0F 00\r
T 0A 01 00 00 FD E1 C3 00 00 00 00\r
R 00 00 01 00\r
T 2E 01 00 00 23 23 46 23 66 68 01 01 01 A7 ED\r
R 00 00 01 00\r
-T 39 01 00 00 42 C2 03 02 00 00\r
+T 39 01 00 00 42 C2 0C 02 00 00\r
R 00 00 01 00 00 06 01 00\r
T 3D 01 00 00\r
R 00 00 01 00\r
T 53 01 00 00 36 EE 00 FD 6E 20 FD 66 21 36 00\r
R 00 00 01 00\r
T 5E 01 00 00 21 0E 00 39 EB 3E 00 00 00 00 21\r
-R 00 00 01 00 2B 0A 10 00\r
-T 66 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75\r
-R 00 00 01 00 02 04 10 00 02 09 0F 00\r
-T 6D 01 00 00 E0 DD 74 E1 FD 4E 20 FD 46 21 03\r
+R 00 00 01 00 2B 0A 13 00\r
+T 66 01 00 00 00 00 00 00 CD 00 00 00 00 EB 3E\r
+R 00 00 01 00 02 04 13 00 02 09 0F 00\r
+T 6D 01 00 00 00 00 00 00 21 00 00 00 00 CD\r
+R 00 00 01 00 2B 04 11 00 02 09 11 00\r
+T 72 01 00 00 00 00 00 00 DD 75 E0 DD 74 E1 FD\r
+R 00 00 01 00 02 04 0F 00\r
+T 7B 01 00 00 4E 20 FD 46 21 03 03 DD 71 EA DD\r
R 00 00 01 00\r
-T 78 01 00 00 03 DD 71 EA DD 70 EB 7D B4 28 71\r
+T 86 01 00 00 70 EB 7D B4 28 71\r
R 00 00 01 00\r
-T 83 01 00 00\r
+T 8C 01 00 00\r
R 00 00 01 00\r
-T 83 01 00 00 23 23 7E 23 66 6F 46 DD 70 E2 DD\r
+T 8C 01 00 00 23 23 7E 23 66 6F 46 DD 70 E2 DD\r
R 00 00 01 00\r
-T 8E 01 00 00 6E E0 DD 66 E1 23 23 46 23 66 68\r
+T 97 01 00 00 6E E0 DD 66 E1 23 23 46 23 66 68\r
R 00 00 01 00\r
-T 99 01 00 00 23 46 DD 70 E3 DD 36 E4 00 21\r
+T A2 01 00 00 23 46 DD 70 E3 DD 36 E4 00 21\r
R 00 00 01 00\r
-T A3 01 00 00 04 00 39 4D 44 DD 5E EA DD 56 EB\r
+T AC 01 00 00 04 00 39 4D 44 DD 5E EA DD 56 EB\r
R 00 00 01 00\r
-T AE 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD\r
-R 00 00 01 00 2B 05 13 00 02 0A 13 00\r
-T B4 01 00 00 00 00 00 00 DD 75 E8 DD 74 E9 DD\r
+T B7 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD\r
+R 00 00 01 00 2B 05 14 00 02 0A 14 00\r
+T BD 01 00 00 00 00 00 00 DD 75 E8 DD 74 E9 DD\r
R 00 00 01 00 02 04 0F 00\r
-T BD 01 00 00 4E E0 DD 46 E1 03 03 69 60 4E 23\r
+T C6 01 00 00 4E E0 DD 46 E1 03 03 69 60 4E 23\r
R 00 00 01 00\r
-T C8 01 00 00 46 DD 5E E8 DD 56 E9 3E\r
+T D1 01 00 00 46 DD 5E E8 DD 56 E9 3E\r
R 00 00 01 00\r
-T D0 01 00 00 00 00 00 00 21 00 00 00 00 CD\r
+T D9 01 00 00 00 00 00 00 21 00 00 00 00 CD\r
R 00 00 01 00 2B 04 0A 00 02 09 0A 00\r
-T D5 01 00 00 00 00 00 00 7D B4 20 19\r
+T DE 01 00 00 00 00 00 00 7D B4 20 19\r
R 00 00 01 00 02 04 0F 00\r
-T DB 01 00 00\r
+T E4 01 00 00\r
R 00 00 01 00\r
-T DB 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD\r
+T E4 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD\r
R 00 00 01 00 2B 05 03 00 02 0A 03 00\r
-T E1 01 00 00 00 00 00 00 01 00 00 DD 5E E0 DD\r
+T EA 01 00 00 00 00 00 00 01 00 00 DD 5E E0 DD\r
R 00 00 01 00 02 04 0F 00\r
-T EA 01 00 00 56 E1 3E 00 00 00 00 21\r
+T F3 01 00 00 56 E1 3E 00 00 00 00 21\r
R 00 00 01 00 29 07 01 00\r
-T EF 01 00 00 00 00 00 00 CD 00 00 00 00\r
+T F8 01 00 00 00 00 00 00 CD 00 00 00 00\r
R 00 00 01 00 00 04 01 00 02 09 0F 00\r
-T F4 01 00 00\r
+T FD 01 00 00\r
R 00 00 01 00\r
-T F4 01 00 00\r
+T FD 01 00 00\r
R 00 00 01 00\r
-T F4 01 00 00 FD E5 D1 FD 7E 1C FD 6E 1A FD 66\r
+T FD 01 00 00 FD E5 D1 FD 7E 1C FD 6E 1A FD 66\r
R 00 00 01 00\r
-T FF 01 00 00 1B CD 00 00 00 00\r
+T 08 02 00 00 1B CD 00 00 00 00\r
R 00 00 01 00 02 06 0F 00\r
-T 03 02 00 00\r
+T 0C 02 00 00\r
R 00 00 01 00\r
-T 03 02 00 00 FD E1 C3 00 00 00 00\r
+T 0C 02 00 00 FD E1 C3 00 00 00 00\r
R 00 00 01 00 02 07 08 00\r
-T 08 02 00 00\r
+T 11 02 00 00\r
R 00 00 01 00\r
-T 08 02 00 00 CD 00 00 00 00 3E 00 00 00 00 21\r
-R 00 00 01 00 02 05 0E 00 2B 0A 15 00\r
-T 0E 02 00 00 00 00 00 00 CD 00 00 00 00 3E\r
-R 00 00 01 00 02 04 15 00 02 09 0F 00\r
-T 14 02 00 00 00 00 00 00 21 00 00 00 00 CD\r
+T 11 02 00 00 CD 00 00 00 00 3E 00 00 00 00 21\r
+R 00 00 01 00 02 05 0E 00 2B 0A 16 00\r
+T 17 02 00 00 00 00 00 00 CD 00 00 00 00 3E\r
+R 00 00 01 00 02 04 16 00 02 09 0F 00\r
+T 1D 02 00 00 00 00 00 00 21 00 00 00 00 CD\r
R 00 00 01 00 2B 04 05 00 02 09 05 00\r
-T 19 02 00 00 00 00 00 00 01 10 00 09 36\r
+T 22 02 00 00 00 00 00 00 01 10 00 09 36\r
R 00 00 01 00 02 04 0F 00\r
-T 20 02 00 00 0F 01 00 00 23 36 0F 01 00 00 23\r
+T 29 02 00 00 0F 01 00 00 23 36 0F 01 00 00 23\r
R 00 00 01 00 09 04 01 00 89 0A 01 00\r
-T 25 02 00 00 36 0F 01 00 00 11 12 00 00 00 3E\r
+T 2E 02 00 00 36 0F 01 00 00 11 12 00 00 00 3E\r
R 00 00 01 00 29 05 01 00 00 0A 02 00\r
-T 2B 02 00 00 00 00 00 00 21 00 00 00 00 CD\r
+T 34 02 00 00 00 00 00 00 21 00 00 00 00 CD\r
R 00 00 01 00 2B 04 0D 00 02 09 0D 00\r
-T 30 02 00 00 00 00 00 00 3E 00 00 00 00 21\r
+T 39 02 00 00 00 00 00 00 3E 00 00 00 00 21\r
R 00 00 01 00 02 04 0F 00 2B 09 01 00\r
-T 35 02 00 00 00 00 00 00 CD 00 00 00 00 C3\r
+T 3E 02 00 00 00 00 00 00 CD 00 00 00 00 C3\r
R 00 00 01 00 02 04 01 00 02 09 0F 00\r
-T 3B 02 00 00 00 00 00 00\r
+T 44 02 00 00 00 00 00 00\r
R 00 00 01 00 02 04 08 00\r
T 00 00 00 00\r
R 00 00 02 00\r
5 EXTERN GUIgo\r
6 EXTERN GUIinit\r
7 EXTERN GUIunit\r
- 8 EXTERN chdir\r
- 9 EXTERN crypt\r
- 10 EXTERN execv\r
- 11 EXTERN exit\r
- 12 EXTERN getpwnam\r
- 13 EXTERN gui_globals\r
- 14 PUBLIC login\r
- 15 PUBLIC login_actionhandler\r
- 16 PUBLIC main\r
- 17 EXTERN perror\r
- 18 EXTERN setenv\r
- 19 EXTERN setgid\r
- 20 EXTERN setuid\r
- 21 EXTERN strcmp\r
- 22 EXTERN strcpy\r
- 23 EXTERN strrchr\r
- 24 EXTERN ?CL64180B_4_06_L00\r
- 25 EXTERN ?BANK_CALL_DIRECT_L08\r
- 26 EXTERN ?BANK_LEAVE_DIRECT_L08\r
- 27 EXTERN ?BANK_FAST_LEAVE_L08\r
- 28 EXTERN ?ENT_PARM_DIRECT_L09\r
- 29 EXTERN ?ENT_AUTO_DIRECT_L09\r
- 30 RSEG CODE\r
- 000068C7 31 login:\r
- 000068C7 FD E5 32 PUSH IY\r
- 000068C9 DD E5 33 PUSH IX\r
- 000068CB C5 34 PUSH BC\r
- 000068CC 21 C0 FF 35 LD HL,65472\r
- 000068CF 39 36 ADD HL,SP\r
- 000068D0 F9 37 LD SP,HL\r
- 000068D1 D5 38 PUSH DE\r
- 000068D2 DD E1 39 POP IX\r
- 000068D4 21 0C 00 40 LD HL,12\r
- 000068D7 19 41 ADD HL,DE\r
- 000068D8 7E 42 LD A,(HL)\r
- 000068D9 23 43 INC HL\r
- 000068DA 66 44 LD H,(HL)\r
- 000068DB 6F 45 LD L,A\r
- 000068DC AF 46 XOR A\r
- 000068DD B6 47 OR (HL)\r
- 000068DE 20 08 48 JR NZ,?0001\r
- 000068E0 49 ?0000:\r
- 000068E0 DD 36 0C DE 50 LD (IX+12),LOW(?0002)\r
- 000068E4 DD 36 0D 84 51 LD (IX+13),HIGH(?0002)\r
- 000068E8 52 ?0001:\r
- 000068E8 21 00 00 53 LD HL,0\r
- 000068EB 39 54 ADD HL,SP\r
- 000068EC 36 2D 55 LD (HL),45\r
- 000068EE 01 2F 00 56 LD BC,47\r
- 000068F1 DD 5E 0C 57 LD E,(IX+12)\r
- 000068F4 DD 56 0D 58 LD D,(IX+13)\r
- 000068F7 3E 00 59 LD A,BYTE3 strrchr\r
- 000068F9 21 38 6B 60 LD HL,LWRD strrchr\r
- 000068FC CD 5E 81 61 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000068FF E5 62 PUSH HL\r
- 00006900 FD E1 63 POP IY\r
- 00006902 7D 64 LD A,L\r
- 00006903 B4 65 OR H\r
- 00006904 28 04 66 JR Z,?0004\r
- 00006906 67 ?0003:\r
- 00006906 FD 23 68 INC IY\r
- 00006908 18 09 69 JR ?0005\r
- 0000690A 70 ?0004:\r
- 0000690A DD 6E 0C 71 LD L,(IX+12)\r
- 0000690D DD 66 0D 72 LD H,(IX+13)\r
- 00006910 E5 73 PUSH HL\r
- 00006911 FD E1 74 POP IY\r
- 00006913 75 ?0005:\r
- 00006913 FD E5 76 PUSH IY\r
- 00006915 C1 77 POP BC\r
- 00006916 21 00 00 78 LD HL,0\r
- 00006919 39 79 ADD HL,SP\r
- 0000691A 11 01 00 80 LD DE,1\r
- 0000691D 19 81 ADD HL,DE\r
- 0000691E EB 82 EX DE,HL\r
- 0000691F 3E 00 83 LD A,BYTE3 strcpy\r
- 00006921 21 A0 75 84 LD HL,LWRD strcpy\r
- 00006924 CD 5E 81 85 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006927 21 00 00 86 LD HL,0\r
- 0000692A 39 87 ADD HL,SP\r
- 0000692B E5 88 PUSH HL\r
- 0000692C 21 42 00 89 LD HL,66\r
- 0000692F 39 90 ADD HL,SP\r
- 00006930 7E 91 LD A,(HL)\r
- 00006931 23 92 INC HL\r
- 00006932 66 93 LD H,(HL)\r
- 00006933 6F 94 LD L,A\r
- 00006934 C1 95 POP BC\r
- 00006935 71 96 LD (HL),C\r
- 00006936 23 97 INC HL\r
- 00006937 70 98 LD (HL),B\r
- 00006938 21 40 00 99 LD HL,64\r
- 0000693B 39 100 ADD HL,SP\r
- 0000693C 47 101 LD B,A\r
- 0000693D 23 102 INC HL\r
- 0000693E 66 103 LD H,(HL)\r
- 0000693F 68 104 LD L,B\r
- 00006940 23 105 INC HL\r
- 00006941 23 106 INC HL\r
- 00006942 AF 107 XOR A\r
- 00006943 77 108 LD (HL),A\r
- 00006944 23 109 INC HL\r
- 00006945 77 110 LD (HL),A\r
- 00006946 DD 5E 06 111 LD E,(IX+6)\r
- 00006949 DD 56 07 112 LD D,(IX+7)\r
- 0000694C 3E 00 113 LD A,BYTE3 setgid\r
- 0000694E 21 04 6B 114 LD HL,LWRD setgid\r
- 00006951 CD 5E 81 115 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006954 DD 5E 04 116 LD E,(IX+4)\r
- 00006957 DD 56 05 117 LD D,(IX+5)\r
- 0000695A 3E 00 118 LD A,BYTE3 setuid\r
- 0000695C 21 E7 6D 119 LD HL,LWRD setuid\r
- 0000695F CD 5E 81 120 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006962 DD 5E 0A 121 LD E,(IX+10)\r
- 00006965 DD 56 0B 122 LD D,(IX+11)\r
- 00006968 3E 00 123 LD A,BYTE3 chdir\r
- 0000696A 21 B3 6D 124 LD HL,LWRD chdir\r
- 0000696D CD 5E 81 125 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006970 21 01 00 126 LD HL,1\r
- 00006973 E5 127 PUSH HL\r
- 00006974 DD 4E 0A 128 LD C,(IX+10)\r
- 00006977 DD 46 0B 129 LD B,(IX+11)\r
- 0000697A 11 E6 84 130 LD DE,?0006\r
- 0000697D 3E 00 131 LD A,BYTE3 setenv\r
- 0000697F 21 06 6F 132 LD HL,LWRD setenv\r
- 00006982 CD 5E 81 133 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006985 F1 134 POP AF\r
- 00006986 21 01 00 135 LD HL,1\r
- 00006989 E5 136 PUSH HL\r
- 0000698A DD 4E 00 137 LD C,(IX+0)\r
- 0000698D DD 46 01 138 LD B,(IX+1)\r
- 00006990 11 EB 84 139 LD DE,?0007\r
- 00006993 3E 00 140 LD A,BYTE3 setenv\r
- 00006995 21 06 6F 141 LD HL,LWRD setenv\r
- 00006998 CD 5E 81 142 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000699B F1 143 POP AF\r
- 0000699C 21 40 00 144 LD HL,64\r
- 0000699F 39 145 ADD HL,SP\r
- 000069A0 4E 146 LD C,(HL)\r
- 000069A1 23 147 INC HL\r
- 000069A2 46 148 LD B,(HL)\r
- 000069A3 DD 5E 0C 149 LD E,(IX+12)\r
- 000069A6 DD 56 0D 150 LD D,(IX+13)\r
- 000069A9 3E 00 151 LD A,BYTE3 execv\r
- 000069AB 21 4C 73 152 LD HL,LWRD execv\r
- 000069AE CD 5E 81 153 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000069B1 DD 5E 0C 154 LD E,(IX+12)\r
- 000069B4 DD 56 0D 155 LD D,(IX+13)\r
- 000069B7 3E 00 156 LD A,BYTE3 perror\r
- 000069B9 21 0F 73 157 LD HL,LWRD perror\r
- 000069BC CD 5E 81 158 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000069BF 11 01 00 159 LD DE,1\r
- 000069C2 3E 01 160 LD A,BYTE3 exit\r
- 000069C4 21 01 47 161 LD HL,LWRD exit\r
- 000069C7 CD 5E 81 162 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000069CA 21 42 00 163 LD HL,66\r
- 000069CD 39 164 ADD HL,SP\r
- 000069CE F9 165 LD SP,HL\r
- 000069CF DD E1 166 POP IX\r
- 000069D1 FD E1 167 POP IY\r
- 000069D3 C3 25 81 168 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 000069D6 169 login_actionhandler:\r
- 000069D6 CD 88 81 170 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000069D9 E0 FF 171 DEFW -32\r
- 000069DB FD E5 172 PUSH IY\r
- 000069DD DD 6E 02 173 LD L,(IX+2)\r
- 000069E0 DD 66 03 174 LD H,(IX+3)\r
- 000069E3 E5 175 PUSH HL\r
- 000069E4 FD E1 176 POP IY\r
- 000069E6 21 26 00 177 LD HL,38\r
- 000069E9 DD 4E 02 178 LD C,(IX+2)\r
- 000069EC DD 46 03 179 LD B,(IX+3)\r
- 000069EF 09 180 ADD HL,BC\r
- 000069F0 46 181 LD B,(HL)\r
- 000069F1 23 182 INC HL\r
- 000069F2 66 183 LD H,(HL)\r
- 000069F3 68 184 LD L,B\r
- 000069F4 23 185 INC HL\r
- 000069F5 23 186 INC HL\r
- 000069F6 23 187 INC HL\r
- 000069F7 46 188 LD B,(HL)\r
- 000069F8 23 189 INC HL\r
- 000069F9 66 190 LD H,(HL)\r
- 000069FA 68 191 LD L,B\r
- 000069FB 01 01 01 192 LD BC,257\r
- 000069FE A7 193 AND A\r
- 000069FF ED 42 194 SBC HL,BC\r
- 00006A01 C2 CA 6A 195 JP NZ,?0009\r
- 00006A04 196 ?0008:\r
- 00006A04 FD 6E 20 197 LD L,(IY+32)\r
- 00006A07 FD 66 21 198 LD H,(IY+33)\r
- 00006A0A 46 199 LD B,(HL)\r
- 00006A0B DD 70 EC 200 LD (IX-20),B\r
- 00006A0E FD 6E 20 201 LD L,(IY+32)\r
- 00006A11 FD 66 21 202 LD H,(IY+33)\r
- 00006A14 23 203 INC HL\r
- 00006A15 46 204 LD B,(HL)\r
- 00006A16 DD 70 ED 205 LD (IX-19),B\r
- 00006A19 DD 36 EE 00 206 LD (IX-18),0\r
- 00006A1D FD 6E 20 207 LD L,(IY+32)\r
- 00006A20 FD 66 21 208 LD H,(IY+33)\r
- 00006A23 36 00 209 LD (HL),0\r
- 00006A25 21 0E 00 210 LD HL,14\r
- 00006A28 39 211 ADD HL,SP\r
- 00006A29 EB 212 EX DE,HL\r
- 00006A2A 3E 00 213 LD A,BYTE3 getpwnam\r
- 00006A2C 21 BC 74 214 LD HL,LWRD getpwnam\r
- 00006A2F CD 5E 81 215 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006A32 DD 75 E0 216 LD (IX-32),L\r
- 00006A35 DD 74 E1 217 LD (IX-31),H\r
- 00006A38 FD 4E 20 218 LD C,(IY+32)\r
- 00006A3B FD 46 21 219 LD B,(IY+33)\r
- 00006A3E 03 220 INC BC\r
- 00006A3F 03 221 INC BC\r
- 00006A40 DD 71 EA 222 LD (IX-22),C\r
- 00006A43 DD 70 EB 223 LD (IX-21),B\r
- 00006A46 7D 224 LD A,L\r
- 00006A47 B4 225 OR H\r
- 00006A48 28 71 226 JR Z,?0013\r
- 00006A4A 227 ?0010:\r
- 00006A4A 23 228 INC HL\r
- 00006A4B 23 229 INC HL\r
- 00006A4C 7E 230 LD A,(HL)\r
- 00006A4D 23 231 INC HL\r
- 00006A4E 66 232 LD H,(HL)\r
- 00006A4F 6F 233 LD L,A\r
- 00006A50 46 234 LD B,(HL)\r
- 00006A51 DD 70 E2 235 LD (IX-30),B\r
- 00006A54 DD 6E E0 236 LD L,(IX-32)\r
- 00006A57 DD 66 E1 237 LD H,(IX-31)\r
- 00006A5A 23 238 INC HL\r
- 00006A5B 23 239 INC HL\r
- 00006A5C 46 240 LD B,(HL)\r
- 00006A5D 23 241 INC HL\r
- 00006A5E 66 242 LD H,(HL)\r
- 00006A5F 68 243 LD L,B\r
- 00006A60 23 244 INC HL\r
- 00006A61 46 245 LD B,(HL)\r
- 00006A62 DD 70 E3 246 LD (IX-29),B\r
- 00006A65 DD 36 E4 00 247 LD (IX-28),0\r
- 00006A69 21 04 00 248 LD HL,4\r
- 00006A6C 39 249 ADD HL,SP\r
- 00006A6D 4D 250 LD C,L\r
- 00006A6E 44 251 LD B,H\r
- 00006A6F DD 5E EA 252 LD E,(IX-22)\r
- 00006A72 DD 56 EB 253 LD D,(IX-21)\r
- 00006A75 3E 01 254 LD A,BYTE3 crypt\r
- 00006A77 21 FD 41 255 LD HL,LWRD crypt\r
- 00006A7A CD 5E 81 256 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006A7D DD 75 E8 257 LD (IX-24),L\r
- 00006A80 DD 74 E9 258 LD (IX-23),H\r
- 00006A83 DD 4E E0 259 LD C,(IX-32)\r
- 00006A86 DD 46 E1 260 LD B,(IX-31)\r
- 00006A89 03 261 INC BC\r
- 00006A8A 03 262 INC BC\r
- 00006A8B 69 263 LD L,C\r
- 00006A8C 60 264 LD H,B\r
- 00006A8D 4E 265 LD C,(HL)\r
- 00006A8E 23 266 INC HL\r
- 00006A8F 46 267 LD B,(HL)\r
- 00006A90 DD 5E E8 268 LD E,(IX-24)\r
- 00006A93 DD 56 E9 269 LD D,(IX-23)\r
- 00006A96 3E 00 270 LD A,BYTE3 strcmp\r
- 00006A98 21 6E 72 271 LD HL,LWRD strcmp\r
- 00006A9B CD 5E 81 272 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006A9E 7D 273 LD A,L\r
- 00006A9F B4 274 OR H\r
- 00006AA0 20 19 275 JR NZ,?0013\r
- 00006AA2 276 ?0012:\r
- 00006AA2 3E 00 277 LD A,BYTE3 ClearScreen\r
- 00006AA4 21 86 48 278 LD HL,LWRD ClearScreen\r
- 00006AA7 CD 5E 81 279 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006AAA 01 00 00 280 LD BC,0\r
- 00006AAD DD 5E E0 281 LD E,(IX-32)\r
- 00006AB0 DD 56 E1 282 LD D,(IX-31)\r
- 00006AB3 3E 00 283 LD A,BYTE3 login\r
- 00006AB5 21 C7 68 284 LD HL,LWRD login\r
- 00006AB8 CD 5E 81 285 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006ABB 286 ?0013:\r
- 00006ABB 287 ?0011:\r
- 00006ABB FD E5 288 PUSH IY\r
- 00006ABD D1 289 POP DE\r
- 00006ABE FD 7E 1C 290 LD A,(IY+28)\r
- 00006AC1 FD 6E 1A 291 LD L,(IY+26)\r
- 00006AC4 FD 66 1B 292 LD H,(IY+27)\r
- 00006AC7 CD 5E 81 293 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006ACA 294 ?0009:\r
- 00006ACA FD E1 295 POP IY\r
- 00006ACC C3 1F 81 296 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00006ACF 297 main:\r
- 00006ACF CD 52 81 298 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00006AD2 3E 00 299 LD A,BYTE3 GUIinit\r
- 00006AD4 21 BA 66 300 LD HL,LWRD GUIinit\r
- 00006AD7 CD 5E 81 301 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006ADA 3E 00 302 LD A,BYTE3 gui_globals\r
- 00006ADC 21 B4 66 303 LD HL,LWRD gui_globals\r
- 00006ADF CD 5E 81 304 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006AE2 01 10 00 305 LD BC,16\r
- 00006AE5 09 306 ADD HL,BC\r
- 00006AE6 36 D6 307 LD (HL),LOW(login_actionhandler)\r
- 00006AE8 23 308 INC HL\r
- 00006AE9 36 69 309 LD (HL),HIGH(login_actionhandler)\r
- 00006AEB 23 310 INC HL\r
- 00006AEC 36 00 311 LD (HL),BYTE3 login_actionhandler\r
- 00006AEE 11 F0 84 312 LD DE,?0014\r
- 00006AF1 3E 00 313 LD A,BYTE3 GUIgo\r
- 00006AF3 21 06 68 314 LD HL,LWRD GUIgo\r
- 00006AF6 CD 5E 81 315 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006AF9 3E 00 316 LD A,BYTE3 GUIunit\r
- 00006AFB 21 E1 67 317 LD HL,LWRD GUIunit\r
- 00006AFE CD 5E 81 318 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006B01 C3 1F 81 319 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 320 RSEG CSTR\r
- 000084DE 321 ?0002:\r
- 000084DE 2F 62 69 6E 2F 73 68 322 DEFB '/bin/sh'\r
- 000084E5 00 323 DEFB 0\r
- 000084E6 324 ?0006:\r
- 000084E6 48 4F 4D 45 325 DEFB 'HOME'\r
- 000084EA 00 326 DEFB 0\r
- 000084EB 327 ?0007:\r
- 000084EB 55 53 45 52 328 DEFB 'USER'\r
- 000084EF 00 329 DEFB 0\r
- 000084F0 330 ?0014:\r
- 000084F0 2F 77 6E 64 2F 6C 6F 331 DEFB '/wnd/logn.scr'\r
+ 8 EXTERN atoi\r
+ 9 EXTERN chdir\r
+ 10 EXTERN crypt\r
+ 11 EXTERN execv\r
+ 12 EXTERN exit\r
+ 13 EXTERN getpwuid\r
+ 14 EXTERN gui_globals\r
+ 15 PUBLIC login\r
+ 16 PUBLIC login_actionhandler\r
+ 17 PUBLIC main\r
+ 18 EXTERN perror\r
+ 19 EXTERN setenv\r
+ 20 EXTERN setgid\r
+ 21 EXTERN setuid\r
+ 22 EXTERN strcmp\r
+ 23 EXTERN strcpy\r
+ 24 EXTERN strrchr\r
+ 25 EXTERN ?CL64180B_4_06_L00\r
+ 26 EXTERN ?BANK_CALL_DIRECT_L08\r
+ 27 EXTERN ?BANK_LEAVE_DIRECT_L08\r
+ 28 EXTERN ?BANK_FAST_LEAVE_L08\r
+ 29 EXTERN ?ENT_PARM_DIRECT_L09\r
+ 30 EXTERN ?ENT_AUTO_DIRECT_L09\r
+ 31 RSEG CODE\r
+ 000068C7 32 login:\r
+ 000068C7 FD E5 33 PUSH IY\r
+ 000068C9 DD E5 34 PUSH IX\r
+ 000068CB C5 35 PUSH BC\r
+ 000068CC 21 C0 FF 36 LD HL,65472\r
+ 000068CF 39 37 ADD HL,SP\r
+ 000068D0 F9 38 LD SP,HL\r
+ 000068D1 D5 39 PUSH DE\r
+ 000068D2 DD E1 40 POP IX\r
+ 000068D4 21 0C 00 41 LD HL,12\r
+ 000068D7 19 42 ADD HL,DE\r
+ 000068D8 7E 43 LD A,(HL)\r
+ 000068D9 23 44 INC HL\r
+ 000068DA 66 45 LD H,(HL)\r
+ 000068DB 6F 46 LD L,A\r
+ 000068DC AF 47 XOR A\r
+ 000068DD B6 48 OR (HL)\r
+ 000068DE 20 08 49 JR NZ,?0001\r
+ 000068E0 50 ?0000:\r
+ 000068E0 DD 36 0C DE 51 LD (IX+12),LOW(?0002)\r
+ 000068E4 DD 36 0D 84 52 LD (IX+13),HIGH(?0002)\r
+ 000068E8 53 ?0001:\r
+ 000068E8 21 00 00 54 LD HL,0\r
+ 000068EB 39 55 ADD HL,SP\r
+ 000068EC 36 2D 56 LD (HL),45\r
+ 000068EE 01 2F 00 57 LD BC,47\r
+ 000068F1 DD 5E 0C 58 LD E,(IX+12)\r
+ 000068F4 DD 56 0D 59 LD D,(IX+13)\r
+ 000068F7 3E 00 60 LD A,BYTE3 strrchr\r
+ 000068F9 21 41 6B 61 LD HL,LWRD strrchr\r
+ 000068FC CD 5E 81 62 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000068FF E5 63 PUSH HL\r
+ 00006900 FD E1 64 POP IY\r
+ 00006902 7D 65 LD A,L\r
+ 00006903 B4 66 OR H\r
+ 00006904 28 04 67 JR Z,?0004\r
+ 00006906 68 ?0003:\r
+ 00006906 FD 23 69 INC IY\r
+ 00006908 18 09 70 JR ?0005\r
+ 0000690A 71 ?0004:\r
+ 0000690A DD 6E 0C 72 LD L,(IX+12)\r
+ 0000690D DD 66 0D 73 LD H,(IX+13)\r
+ 00006910 E5 74 PUSH HL\r
+ 00006911 FD E1 75 POP IY\r
+ 00006913 76 ?0005:\r
+ 00006913 FD E5 77 PUSH IY\r
+ 00006915 C1 78 POP BC\r
+ 00006916 21 00 00 79 LD HL,0\r
+ 00006919 39 80 ADD HL,SP\r
+ 0000691A 11 01 00 81 LD DE,1\r
+ 0000691D 19 82 ADD HL,DE\r
+ 0000691E EB 83 EX DE,HL\r
+ 0000691F 3E 00 84 LD A,BYTE3 strcpy\r
+ 00006921 21 C5 74 85 LD HL,LWRD strcpy\r
+ 00006924 CD 5E 81 86 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006927 21 00 00 87 LD HL,0\r
+ 0000692A 39 88 ADD HL,SP\r
+ 0000692B E5 89 PUSH HL\r
+ 0000692C 21 42 00 90 LD HL,66\r
+ 0000692F 39 91 ADD HL,SP\r
+ 00006930 7E 92 LD A,(HL)\r
+ 00006931 23 93 INC HL\r
+ 00006932 66 94 LD H,(HL)\r
+ 00006933 6F 95 LD L,A\r
+ 00006934 C1 96 POP BC\r
+ 00006935 71 97 LD (HL),C\r
+ 00006936 23 98 INC HL\r
+ 00006937 70 99 LD (HL),B\r
+ 00006938 21 40 00 100 LD HL,64\r
+ 0000693B 39 101 ADD HL,SP\r
+ 0000693C 47 102 LD B,A\r
+ 0000693D 23 103 INC HL\r
+ 0000693E 66 104 LD H,(HL)\r
+ 0000693F 68 105 LD L,B\r
+ 00006940 23 106 INC HL\r
+ 00006941 23 107 INC HL\r
+ 00006942 AF 108 XOR A\r
+ 00006943 77 109 LD (HL),A\r
+ 00006944 23 110 INC HL\r
+ 00006945 77 111 LD (HL),A\r
+ 00006946 DD 5E 06 112 LD E,(IX+6)\r
+ 00006949 DD 56 07 113 LD D,(IX+7)\r
+ 0000694C 3E 00 114 LD A,BYTE3 setgid\r
+ 0000694E 21 0D 6B 115 LD HL,LWRD setgid\r
+ 00006951 CD 5E 81 116 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006954 DD 5E 04 117 LD E,(IX+4)\r
+ 00006957 DD 56 05 118 LD D,(IX+5)\r
+ 0000695A 3E 00 119 LD A,BYTE3 setuid\r
+ 0000695C 21 F0 6D 120 LD HL,LWRD setuid\r
+ 0000695F CD 5E 81 121 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006962 DD 5E 0A 122 LD E,(IX+10)\r
+ 00006965 DD 56 0B 123 LD D,(IX+11)\r
+ 00006968 3E 00 124 LD A,BYTE3 chdir\r
+ 0000696A 21 BC 6D 125 LD HL,LWRD chdir\r
+ 0000696D CD 5E 81 126 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006970 21 01 00 127 LD HL,1\r
+ 00006973 E5 128 PUSH HL\r
+ 00006974 DD 4E 0A 129 LD C,(IX+10)\r
+ 00006977 DD 46 0B 130 LD B,(IX+11)\r
+ 0000697A 11 E6 84 131 LD DE,?0006\r
+ 0000697D 3E 00 132 LD A,BYTE3 setenv\r
+ 0000697F 21 0F 6F 133 LD HL,LWRD setenv\r
+ 00006982 CD 5E 81 134 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006985 F1 135 POP AF\r
+ 00006986 21 01 00 136 LD HL,1\r
+ 00006989 E5 137 PUSH HL\r
+ 0000698A DD 4E 00 138 LD C,(IX+0)\r
+ 0000698D DD 46 01 139 LD B,(IX+1)\r
+ 00006990 11 EB 84 140 LD DE,?0007\r
+ 00006993 3E 00 141 LD A,BYTE3 setenv\r
+ 00006995 21 0F 6F 142 LD HL,LWRD setenv\r
+ 00006998 CD 5E 81 143 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000699B F1 144 POP AF\r
+ 0000699C 21 40 00 145 LD HL,64\r
+ 0000699F 39 146 ADD HL,SP\r
+ 000069A0 4E 147 LD C,(HL)\r
+ 000069A1 23 148 INC HL\r
+ 000069A2 46 149 LD B,(HL)\r
+ 000069A3 DD 5E 0C 150 LD E,(IX+12)\r
+ 000069A6 DD 56 0D 151 LD D,(IX+13)\r
+ 000069A9 3E 00 152 LD A,BYTE3 execv\r
+ 000069AB 21 55 73 153 LD HL,LWRD execv\r
+ 000069AE CD 5E 81 154 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000069B1 DD 5E 0C 155 LD E,(IX+12)\r
+ 000069B4 DD 56 0D 156 LD D,(IX+13)\r
+ 000069B7 3E 00 157 LD A,BYTE3 perror\r
+ 000069B9 21 18 73 158 LD HL,LWRD perror\r
+ 000069BC CD 5E 81 159 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000069BF 11 01 00 160 LD DE,1\r
+ 000069C2 3E 01 161 LD A,BYTE3 exit\r
+ 000069C4 21 04 45 162 LD HL,LWRD exit\r
+ 000069C7 CD 5E 81 163 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000069CA 21 42 00 164 LD HL,66\r
+ 000069CD 39 165 ADD HL,SP\r
+ 000069CE F9 166 LD SP,HL\r
+ 000069CF DD E1 167 POP IX\r
+ 000069D1 FD E1 168 POP IY\r
+ 000069D3 C3 25 81 169 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 000069D6 170 login_actionhandler:\r
+ 000069D6 CD 88 81 171 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000069D9 E0 FF 172 DEFW -32\r
+ 000069DB FD E5 173 PUSH IY\r
+ 000069DD DD 6E 02 174 LD L,(IX+2)\r
+ 000069E0 DD 66 03 175 LD H,(IX+3)\r
+ 000069E3 E5 176 PUSH HL\r
+ 000069E4 FD E1 177 POP IY\r
+ 000069E6 21 26 00 178 LD HL,38\r
+ 000069E9 DD 4E 02 179 LD C,(IX+2)\r
+ 000069EC DD 46 03 180 LD B,(IX+3)\r
+ 000069EF 09 181 ADD HL,BC\r
+ 000069F0 46 182 LD B,(HL)\r
+ 000069F1 23 183 INC HL\r
+ 000069F2 66 184 LD H,(HL)\r
+ 000069F3 68 185 LD L,B\r
+ 000069F4 23 186 INC HL\r
+ 000069F5 23 187 INC HL\r
+ 000069F6 23 188 INC HL\r
+ 000069F7 46 189 LD B,(HL)\r
+ 000069F8 23 190 INC HL\r
+ 000069F9 66 191 LD H,(HL)\r
+ 000069FA 68 192 LD L,B\r
+ 000069FB 01 01 01 193 LD BC,257\r
+ 000069FE A7 194 AND A\r
+ 000069FF ED 42 195 SBC HL,BC\r
+ 00006A01 C2 D3 6A 196 JP NZ,?0009\r
+ 00006A04 197 ?0008:\r
+ 00006A04 FD 6E 20 198 LD L,(IY+32)\r
+ 00006A07 FD 66 21 199 LD H,(IY+33)\r
+ 00006A0A 46 200 LD B,(HL)\r
+ 00006A0B DD 70 EC 201 LD (IX-20),B\r
+ 00006A0E FD 6E 20 202 LD L,(IY+32)\r
+ 00006A11 FD 66 21 203 LD H,(IY+33)\r
+ 00006A14 23 204 INC HL\r
+ 00006A15 46 205 LD B,(HL)\r
+ 00006A16 DD 70 ED 206 LD (IX-19),B\r
+ 00006A19 DD 36 EE 00 207 LD (IX-18),0\r
+ 00006A1D FD 6E 20 208 LD L,(IY+32)\r
+ 00006A20 FD 66 21 209 LD H,(IY+33)\r
+ 00006A23 36 00 210 LD (HL),0\r
+ 00006A25 21 0E 00 211 LD HL,14\r
+ 00006A28 39 212 ADD HL,SP\r
+ 00006A29 EB 213 EX DE,HL\r
+ 00006A2A 3E 00 214 LD A,BYTE3 atoi\r
+ 00006A2C 21 39 75 215 LD HL,LWRD atoi\r
+ 00006A2F CD 5E 81 216 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006A32 EB 217 EX DE,HL\r
+ 00006A33 3E 00 218 LD A,BYTE3 getpwuid\r
+ 00006A35 21 EC 74 219 LD HL,LWRD getpwuid\r
+ 00006A38 CD 5E 81 220 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006A3B DD 75 E0 221 LD (IX-32),L\r
+ 00006A3E DD 74 E1 222 LD (IX-31),H\r
+ 00006A41 FD 4E 20 223 LD C,(IY+32)\r
+ 00006A44 FD 46 21 224 LD B,(IY+33)\r
+ 00006A47 03 225 INC BC\r
+ 00006A48 03 226 INC BC\r
+ 00006A49 DD 71 EA 227 LD (IX-22),C\r
+ 00006A4C DD 70 EB 228 LD (IX-21),B\r
+ 00006A4F 7D 229 LD A,L\r
+ 00006A50 B4 230 OR H\r
+ 00006A51 28 71 231 JR Z,?0013\r
+ 00006A53 232 ?0010:\r
+ 00006A53 23 233 INC HL\r
+ 00006A54 23 234 INC HL\r
+ 00006A55 7E 235 LD A,(HL)\r
+ 00006A56 23 236 INC HL\r
+ 00006A57 66 237 LD H,(HL)\r
+ 00006A58 6F 238 LD L,A\r
+ 00006A59 46 239 LD B,(HL)\r
+ 00006A5A DD 70 E2 240 LD (IX-30),B\r
+ 00006A5D DD 6E E0 241 LD L,(IX-32)\r
+ 00006A60 DD 66 E1 242 LD H,(IX-31)\r
+ 00006A63 23 243 INC HL\r
+ 00006A64 23 244 INC HL\r
+ 00006A65 46 245 LD B,(HL)\r
+ 00006A66 23 246 INC HL\r
+ 00006A67 66 247 LD H,(HL)\r
+ 00006A68 68 248 LD L,B\r
+ 00006A69 23 249 INC HL\r
+ 00006A6A 46 250 LD B,(HL)\r
+ 00006A6B DD 70 E3 251 LD (IX-29),B\r
+ 00006A6E DD 36 E4 00 252 LD (IX-28),0\r
+ 00006A72 21 04 00 253 LD HL,4\r
+ 00006A75 39 254 ADD HL,SP\r
+ 00006A76 4D 255 LD C,L\r
+ 00006A77 44 256 LD B,H\r
+ 00006A78 DD 5E EA 257 LD E,(IX-22)\r
+ 00006A7B DD 56 EB 258 LD D,(IX-21)\r
+ 00006A7E 3E 01 259 LD A,BYTE3 crypt\r
+ 00006A80 21 00 40 260 LD HL,LWRD crypt\r
+ 00006A83 CD 5E 81 261 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006A86 DD 75 E8 262 LD (IX-24),L\r
+ 00006A89 DD 74 E9 263 LD (IX-23),H\r
+ 00006A8C DD 4E E0 264 LD C,(IX-32)\r
+ 00006A8F DD 46 E1 265 LD B,(IX-31)\r
+ 00006A92 03 266 INC BC\r
+ 00006A93 03 267 INC BC\r
+ 00006A94 69 268 LD L,C\r
+ 00006A95 60 269 LD H,B\r
+ 00006A96 4E 270 LD C,(HL)\r
+ 00006A97 23 271 INC HL\r
+ 00006A98 46 272 LD B,(HL)\r
+ 00006A99 DD 5E E8 273 LD E,(IX-24)\r
+ 00006A9C DD 56 E9 274 LD D,(IX-23)\r
+ 00006A9F 3E 00 275 LD A,BYTE3 strcmp\r
+ 00006AA1 21 77 72 276 LD HL,LWRD strcmp\r
+ 00006AA4 CD 5E 81 277 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006AA7 7D 278 LD A,L\r
+ 00006AA8 B4 279 OR H\r
+ 00006AA9 20 19 280 JR NZ,?0013\r
+ 00006AAB 281 ?0012:\r
+ 00006AAB 3E 00 282 LD A,BYTE3 ClearScreen\r
+ 00006AAD 21 86 48 283 LD HL,LWRD ClearScreen\r
+ 00006AB0 CD 5E 81 284 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006AB3 01 00 00 285 LD BC,0\r
+ 00006AB6 DD 5E E0 286 LD E,(IX-32)\r
+ 00006AB9 DD 56 E1 287 LD D,(IX-31)\r
+ 00006ABC 3E 00 288 LD A,BYTE3 login\r
+ 00006ABE 21 C7 68 289 LD HL,LWRD login\r
+ 00006AC1 CD 5E 81 290 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006AC4 291 ?0013:\r
+ 00006AC4 292 ?0011:\r
+ 00006AC4 FD E5 293 PUSH IY\r
+ 00006AC6 D1 294 POP DE\r
+ 00006AC7 FD 7E 1C 295 LD A,(IY+28)\r
+ 00006ACA FD 6E 1A 296 LD L,(IY+26)\r
+ 00006ACD FD 66 1B 297 LD H,(IY+27)\r
+ 00006AD0 CD 5E 81 298 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006AD3 299 ?0009:\r
+ 00006AD3 FD E1 300 POP IY\r
+ 00006AD5 C3 1F 81 301 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00006AD8 302 main:\r
+ 00006AD8 CD 52 81 303 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00006ADB 3E 00 304 LD A,BYTE3 GUIinit\r
+ 00006ADD 21 BA 66 305 LD HL,LWRD GUIinit\r
+ 00006AE0 CD 5E 81 306 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006AE3 3E 00 307 LD A,BYTE3 gui_globals\r
+ 00006AE5 21 B4 66 308 LD HL,LWRD gui_globals\r
+ 00006AE8 CD 5E 81 309 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006AEB 01 10 00 310 LD BC,16\r
+ 00006AEE 09 311 ADD HL,BC\r
+ 00006AEF 36 D6 312 LD (HL),LOW(login_actionhandler)\r
+ 00006AF1 23 313 INC HL\r
+ 00006AF2 36 69 314 LD (HL),HIGH(login_actionhandler)\r
+ 00006AF4 23 315 INC HL\r
+ 00006AF5 36 00 316 LD (HL),BYTE3 login_actionhandler\r
+ 00006AF7 11 F0 84 317 LD DE,?0014\r
+ 00006AFA 3E 00 318 LD A,BYTE3 GUIgo\r
+ 00006AFC 21 06 68 319 LD HL,LWRD GUIgo\r
+ 00006AFF CD 5E 81 320 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006B02 3E 00 321 LD A,BYTE3 GUIunit\r
+ 00006B04 21 E1 67 322 LD HL,LWRD GUIunit\r
+ 00006B07 CD 5E 81 323 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006B0A C3 1F 81 324 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 325 RSEG CSTR\r
+ 000084DE 326 ?0002:\r
+ 000084DE 2F 62 69 6E 2F 73 68 327 DEFB '/bin/sh'\r
+ 000084E5 00 328 DEFB 0\r
+ 000084E6 329 ?0006:\r
+ 000084E6 48 4F 4D 45 330 DEFB 'HOME'\r
+ 000084EA 00 331 DEFB 0\r
+ 000084EB 332 ?0007:\r
+ 000084EB 55 53 45 52 333 DEFB 'USER'\r
+ 000084EF 00 334 DEFB 0\r
+ 000084F0 335 ?0014:\r
+ 000084F0 2F 77 6E 64 2F 6C 6F 336 DEFB '/wnd/logn.scr'\r
67 6E 2E 73 63 72\r
- 000084FD 00 332 DEFB 0\r
- 00000020 333 END\r
+ 000084FD 00 337 DEFB 0\r
+ 00000020 338 END\r
\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1.\r
Hexadecimal [32-Bits]\r
\r
1 ?0003 0000003F R | 1 ?0004 00000043 R\r
1 ?0005 0000004C R | 2 ?0006 00000008 R\r
2 ?0007 0000000D R | 1 ?0008 0000013D R\r
- 1 ?0009 00000203 R | 1 ?0010 00000183 R\r
- 1 ?0011 000001F4 R | 1 ?0012 000001DB R\r
- 1 ?0013 000001F4 R | 2 ?0014 00000012 R\r
+ 1 ?0009 0000020C R | 1 ?0010 0000018C R\r
+ 1 ?0011 000001FD R | 1 ?0012 000001E4 R\r
+ 1 ?0013 000001FD R | 2 ?0014 00000012 R\r
?BANK_CALL_DIR ******** GX | ?BANK_FAST_LEA ******** GX\r
?BANK_LEAVE_DI ******** GX | ?CL64180B_4_06 ******** GX\r
?ENT_AUTO_DIRE ******** GX | ?ENT_PARM_DIRE ******** GX\r
ClearScreen ******** GX | GUIgo ******** GX\r
GUIinit ******** GX | GUIunit ******** GX\r
- chdir ******** GX | crypt ******** GX\r
- execv ******** GX | exit ******** GX\r
- getpwnam ******** GX | gui_globals ******** GX\r
- 1 login 00000000 GR | 1 login_actionha 0000010F GR\r
- 1 main 00000208 GR | perror ******** GX\r
- setenv ******** GX | setgid ******** GX\r
- setuid ******** GX | strcmp ******** GX\r
- strcpy ******** GX | strrchr ******** GX\r
-\r
+ atoi ******** GX | chdir ******** GX\r
+ crypt ******** GX | execv ******** GX\r
+ exit ******** GX | getpwuid ******** GX\r
+ gui_globals ******** GX | 1 login 00000000 GR\r
+ 1 login_actionha 0000010F GR | 1 main 00000211 GR\r
+ perror ******** GX | setenv ******** GX\r
+ setgid ******** GX | setuid ******** GX\r
+ strcmp ******** GX | strcpy ******** GX\r
+ strrchr ******** GX\r
\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2.\r
Hexadecimal [32-Bits]\r
\r
Area Table\r
\r
0 _DEFAULT size 0 flags 0\r
- 1 CODE size 23D flags 0\r
+ 1 CODE size 246 flags 0\r
2 CSTR size 20 flags 0\r
EXTERN GUIgo\r
EXTERN GUIinit\r
EXTERN GUIunit\r
+ EXTERN atoi\r
EXTERN chdir\r
EXTERN crypt\r
EXTERN execv\r
EXTERN exit\r
- EXTERN getpwnam\r
+ EXTERN getpwuid\r
EXTERN gui_globals\r
PUBLIC login\r
PUBLIC login_actionhandler\r
LD HL,14\r
ADD HL,SP\r
EX DE,HL\r
- LD A,BYTE3 getpwnam\r
- LD HL,LWRD getpwnam\r
+ LD A,BYTE3 atoi\r
+ LD HL,LWRD atoi\r
+ CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ EX DE,HL\r
+ LD A,BYTE3 getpwuid\r
+ LD HL,LWRD getpwuid\r
CALL LWRD ?BANK_CALL_DIRECT_L08\r
LD (IX-32),L\r
LD (IX-31),H\r
91 EXTERN ?ENT_PARM_DIRECT_L09\r
92 EXTERN ?ENT_AUTO_DIRECT_L09\r
93 RSEG CODE\r
- 00004648 94 GraphicsOpen:\r
- 00004648 CD 7A 82 95 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 0000464B F8 FF 96 DEFW 65528\r
- 0000464D 21 06 00 97 LD HL,6\r
- 00004650 39 98 ADD HL,SP\r
- 00004651 EB 99 EX DE,HL\r
- 00004652 21 AF 84 100 LD HL,?0000\r
- 00004655 01 02 00 101 LD BC,2\r
- 00004658 ED B0 102 LDIR\r
- 0000465A 2A 3F 87 103 LD HL,(global)\r
- 0000465D 23 104 INC HL\r
- 0000465E 23 105 INC HL\r
- 0000465F E5 106 PUSH HL\r
- 00004660 03 107 INC BC\r
- 00004661 03 108 INC BC\r
- 00004662 C5 109 PUSH BC\r
- 00004663 01 E3 84 110 LD BC,?0001\r
- 00004666 C5 111 PUSH BC\r
- 00004667 3E 00 112 LD A,BYTE3 open\r
- 00004669 21 CD 7E 113 LD HL,LWRD open\r
- 0000466C CD FB 81 114 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000466F F1 115 POP AF\r
- 00004670 F1 116 POP AF\r
- 00004671 4D 117 LD C,L\r
- 00004672 44 118 LD B,H\r
- 00004673 E1 119 POP HL\r
- 00004674 71 120 LD (HL),C\r
- 00004675 23 121 INC HL\r
- 00004676 70 122 LD (HL),B\r
- 00004677 21 00 00 123 LD HL,0\r
- 0000467A 39 124 ADD HL,SP\r
- 0000467B E5 125 PUSH HL\r
- 0000467C 21 00 00 126 LD HL,0\r
- 0000467F E5 127 PUSH HL\r
- 00004680 2A 3F 87 128 LD HL,(global)\r
- 00004683 23 129 INC HL\r
- 00004684 23 130 INC HL\r
- 00004685 4E 131 LD C,(HL)\r
- 00004686 23 132 INC HL\r
- 00004687 46 133 LD B,(HL)\r
- 00004688 C5 134 PUSH BC\r
- 00004689 3E 00 135 LD A,BYTE3 ioctl\r
- 0000468B 21 E2 73 136 LD HL,LWRD ioctl\r
- 0000468E CD FB 81 137 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004691 F1 138 POP AF\r
- 00004692 F1 139 POP AF\r
- 00004693 F1 140 POP AF\r
- 00004694 DD 36 FC 60 141 LD (IX-4),96\r
- 00004698 DD 36 FD 00 142 LD (IX-3),0\r
- 0000469C 21 00 00 143 LD HL,0\r
- 0000469F 39 144 ADD HL,SP\r
- 000046A0 E5 145 PUSH HL\r
- 000046A1 21 01 00 146 LD HL,1\r
- 000046A4 E5 147 PUSH HL\r
- 000046A5 2A 3F 87 148 LD HL,(global)\r
- 000046A8 23 149 INC HL\r
- 000046A9 23 150 INC HL\r
- 000046AA 4E 151 LD C,(HL)\r
- 000046AB 23 152 INC HL\r
- 000046AC 46 153 LD B,(HL)\r
- 000046AD C5 154 PUSH BC\r
- 000046AE 3E 00 155 LD A,BYTE3 ioctl\r
- 000046B0 21 E2 73 156 LD HL,LWRD ioctl\r
- 000046B3 CD FB 81 157 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000046B6 F1 158 POP AF\r
- 000046B7 F1 159 POP AF\r
- 000046B8 F1 160 POP AF\r
- 000046B9 21 02 00 161 LD HL,2\r
- 000046BC E5 162 PUSH HL\r
- 000046BD 2E 08 163 LD L,8\r
- 000046BF 164 ?0372:\r
- 000046BF 39 165 ADD HL,SP\r
- 000046C0 4D 166 LD C,L\r
- 000046C1 167 ?0427:\r
- 000046C1 44 168 LD B,H\r
- 000046C2 2A 3F 87 169 LD HL,(global)\r
- 000046C5 170 ?0428:\r
- 000046C5 23 171 INC HL\r
- 000046C6 23 172 INC HL\r
- 000046C7 173 ?0429:\r
- 000046C7 5E 174 LD E,(HL)\r
- 000046C8 23 175 INC HL\r
- 000046C9 176 ?0430:\r
- 000046C9 56 177 LD D,(HL)\r
- 000046CA 3E 00 178 LD A,BYTE3 _write\r
- 000046CC 179 ?0431:\r
- 000046CC 21 72 72 180 LD HL,LWRD _write\r
- 000046CF CD FB 81 181 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000046D2 F1 182 POP AF\r
- 000046D3 C3 A3 81 183 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000046D6 184 GraphicsClose:\r
- 000046D6 D5 185 PUSH DE\r
- 000046D7 2A 3F 87 186 LD HL,(global)\r
- 000046DA 23 187 INC HL\r
- 000046DB 23 188 INC HL\r
- 000046DC 5E 189 LD E,(HL)\r
- 000046DD 23 190 INC HL\r
- 000046DE 56 191 LD D,(HL)\r
- 000046DF 3E 00 192 LD A,BYTE3 close\r
- 000046E1 21 96 73 193 LD HL,LWRD close\r
- 000046E4 CD FB 81 194 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000046E7 D1 195 POP DE\r
- 000046E8 C3 A9 81 196 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 000046EB 197 Move:\r
- 000046EB CD 7A 82 198 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000046EE FC FF 199 DEFW 65532\r
- 000046F0 21 00 00 200 LD HL,0\r
- 000046F3 39 201 ADD HL,SP\r
- 000046F4 EB 202 EX DE,HL\r
- 000046F5 21 B1 84 203 LD HL,?0002\r
- 000046F8 01 04 00 204 LD BC,4\r
- 000046FB ED B0 205 LDIR\r
- 000046FD DD 46 02 206 LD B,(IX+2)\r
- 00004700 DD 70 FE 207 LD (IX-2),B\r
- 00004703 DD 46 04 208 LD B,(IX+4)\r
- 00004706 DD 70 FF 209 LD (IX-1),B\r
- 00004709 21 04 00 210 LD HL,4\r
- 0000470C E5 211 PUSH HL\r
- 0000470D 2B 212 DEC HL\r
- 0000470E 2B 213 DEC HL\r
- 0000470F C3 BF 46 214 JP LWRD ?0372\r
- 00004712 4D 215 LD C,L\r
- 00004713 216 ?0381:\r
- 00004713 C3 C1 46 217 JP LWRD ?0427\r
- 00004716 2A 3F 87 218 LD HL,(global)\r
- 00004719 23 219 INC HL\r
- 0000471A 23 220 INC HL\r
- 0000471B 221 ?0432:\r
- 0000471B 5E 222 LD E,(HL)\r
- 0000471C 23 223 INC HL\r
- 0000471D 224 ?0433:\r
- 0000471D 56 225 LD D,(HL)\r
- 0000471E 3E 00 226 LD A,BYTE3 _write\r
- 00004720 227 ?0434:\r
- 00004720 C3 CC 46 228 JP LWRD ?0431\r
- 00004723 CD FB 81 229 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004726 F1 230 POP AF\r
- 00004727 C3 A3 81 231 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 0000472A 232 ClearRect:\r
- 0000472A CD 7A 82 233 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 0000472D FC FF 234 DEFW 65532\r
- 0000472F 21 00 00 235 LD HL,0\r
- 00004732 39 236 ADD HL,SP\r
- 00004733 EB 237 EX DE,HL\r
- 00004734 21 B5 84 238 LD HL,?0003\r
- 00004737 01 04 00 239 LD BC,4\r
- 0000473A ED B0 240 LDIR\r
- 0000473C DD 46 02 241 LD B,(IX+2)\r
- 0000473F DD 70 FE 242 LD (IX-2),B\r
- 00004742 DD 46 04 243 LD B,(IX+4)\r
- 00004745 DD 70 FF 244 LD (IX-1),B\r
- 00004748 21 04 00 245 LD HL,4\r
- 0000474B E5 246 PUSH HL\r
- 0000474C 2B 247 DEC HL\r
- 0000474D 2B 248 DEC HL\r
- 0000474E C3 BF 46 249 JP LWRD ?0372\r
- 00004751 4D 250 LD C,L\r
- 00004752 C3 13 47 251 JP LWRD ?0381\r
- 00004755 2A 3F 87 252 LD HL,(global)\r
- 00004758 253 ?0389:\r
- 00004758 C3 C5 46 254 JP LWRD ?0428\r
- 0000475B 23 255 INC HL\r
- 0000475C C3 1B 47 256 JP LWRD ?0432\r
- 0000475F 23 257 INC HL\r
- 00004760 56 258 LD D,(HL)\r
- 00004761 3E 00 259 LD A,BYTE3 _write\r
- 00004763 260 ?0435:\r
- 00004763 C3 CC 46 261 JP LWRD ?0431\r
- 00004766 CD FB 81 262 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004769 F1 263 POP AF\r
- 0000476A C3 A3 81 264 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 0000476D 265 DrawRectNC:\r
- 0000476D CD 7A 82 266 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004770 FC FF 267 DEFW 65532\r
- 00004772 21 00 00 268 LD HL,0\r
- 00004775 39 269 ADD HL,SP\r
- 00004776 EB 270 EX DE,HL\r
- 00004777 21 B9 84 271 LD HL,?0004\r
- 0000477A 01 04 00 272 LD BC,4\r
- 0000477D ED B0 273 LDIR\r
- 0000477F DD 46 02 274 LD B,(IX+2)\r
- 00004782 DD 70 FE 275 LD (IX-2),B\r
- 00004785 DD 46 04 276 LD B,(IX+4)\r
- 00004788 DD 70 FF 277 LD (IX-1),B\r
- 0000478B 21 04 00 278 LD HL,4\r
- 0000478E E5 279 PUSH HL\r
- 0000478F 2B 280 DEC HL\r
- 00004790 2B 281 DEC HL\r
- 00004791 C3 BF 46 282 JP LWRD ?0372\r
- 00004794 4D 283 LD C,L\r
- 00004795 C3 13 47 284 JP LWRD ?0381\r
- 00004798 2A 3F 87 285 LD HL,(global)\r
- 0000479B C3 58 47 286 JP LWRD ?0389\r
- 0000479E 23 287 INC HL\r
- 0000479F 288 ?0396:\r
- 0000479F C3 C7 46 289 JP LWRD ?0429\r
- 000047A2 23 290 INC HL\r
- 000047A3 C3 1D 47 291 JP LWRD ?0433\r
- 000047A6 3E 00 292 LD A,BYTE3 _write\r
- 000047A8 C3 63 47 293 JP LWRD ?0435\r
- 000047AB CD FB 81 294 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000047AE F1 295 POP AF\r
- 000047AF C3 A3 81 296 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000047B2 297 FillRect:\r
- 000047B2 CD 7A 82 298 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000047B5 FC FF 299 DEFW 65532\r
- 000047B7 21 00 00 300 LD HL,0\r
- 000047BA 39 301 ADD HL,SP\r
- 000047BB EB 302 EX DE,HL\r
- 000047BC 21 BD 84 303 LD HL,?0005\r
- 000047BF 01 04 00 304 LD BC,4\r
- 000047C2 ED B0 305 LDIR\r
- 000047C4 DD 46 02 306 LD B,(IX+2)\r
- 000047C7 DD 70 FE 307 LD (IX-2),B\r
- 000047CA DD 46 04 308 LD B,(IX+4)\r
- 000047CD DD 70 FF 309 LD (IX-1),B\r
- 000047D0 21 04 00 310 LD HL,4\r
- 000047D3 E5 311 PUSH HL\r
- 000047D4 2B 312 DEC HL\r
- 000047D5 2B 313 DEC HL\r
- 000047D6 C3 BF 46 314 JP LWRD ?0372\r
- 000047D9 4D 315 LD C,L\r
- 000047DA C3 13 47 316 JP LWRD ?0381\r
- 000047DD 2A 3F 87 317 LD HL,(global)\r
- 000047E0 C3 58 47 318 JP LWRD ?0389\r
- 000047E3 23 319 INC HL\r
- 000047E4 C3 9F 47 320 JP LWRD ?0396\r
- 000047E7 23 321 INC HL\r
- 000047E8 322 ?0402:\r
- 000047E8 C3 C9 46 323 JP LWRD ?0430\r
- 000047EB 3E 00 324 LD A,BYTE3 _write\r
- 000047ED C3 20 47 325 JP LWRD ?0434\r
- 000047F0 CD FB 81 326 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000047F3 F1 327 POP AF\r
- 000047F4 C3 A3 81 328 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000047F7 329 FillRectNC:\r
- 000047F7 CD 7A 82 330 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000047FA FC FF 331 DEFW 65532\r
- 000047FC 21 00 00 332 LD HL,0\r
- 000047FF 39 333 ADD HL,SP\r
- 00004800 EB 334 EX DE,HL\r
- 00004801 21 C1 84 335 LD HL,?0006\r
- 00004804 01 04 00 336 LD BC,4\r
- 00004807 ED B0 337 LDIR\r
- 00004809 DD 46 02 338 LD B,(IX+2)\r
- 0000480C DD 70 FE 339 LD (IX-2),B\r
- 0000480F DD 46 04 340 LD B,(IX+4)\r
- 00004812 DD 70 FF 341 LD (IX-1),B\r
- 00004815 21 04 00 342 LD HL,4\r
- 00004818 E5 343 PUSH HL\r
- 00004819 2B 344 DEC HL\r
- 0000481A 2B 345 DEC HL\r
- 0000481B C3 BF 46 346 JP LWRD ?0372\r
- 0000481E 4D 347 LD C,L\r
- 0000481F C3 13 47 348 JP LWRD ?0381\r
- 00004822 2A 3F 87 349 LD HL,(global)\r
- 00004825 C3 58 47 350 JP LWRD ?0389\r
- 00004828 23 351 INC HL\r
- 00004829 C3 9F 47 352 JP LWRD ?0396\r
- 0000482C 23 353 INC HL\r
- 0000482D C3 E8 47 354 JP LWRD ?0402\r
- 00004830 3E 00 355 LD A,BYTE3 _write\r
- 00004832 356 ?0407:\r
- 00004832 C3 CC 46 357 JP LWRD ?0431\r
- 00004835 CD FB 81 358 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004838 F1 359 POP AF\r
- 00004839 C3 A3 81 360 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 0000483C 361 GrayRect:\r
- 0000483C CD 7A 82 362 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 0000483F FC FF 363 DEFW 65532\r
- 00004841 21 00 00 364 LD HL,0\r
- 00004844 39 365 ADD HL,SP\r
- 00004845 EB 366 EX DE,HL\r
- 00004846 21 C5 84 367 LD HL,?0007\r
- 00004849 01 04 00 368 LD BC,4\r
- 0000484C ED B0 369 LDIR\r
- 0000484E DD 46 02 370 LD B,(IX+2)\r
- 00004851 DD 70 FE 371 LD (IX-2),B\r
- 00004854 DD 46 04 372 LD B,(IX+4)\r
- 00004857 DD 70 FF 373 LD (IX-1),B\r
- 0000485A 21 04 00 374 LD HL,4\r
- 0000485D E5 375 PUSH HL\r
- 0000485E 2B 376 DEC HL\r
- 0000485F 2B 377 DEC HL\r
- 00004860 C3 BF 46 378 JP LWRD ?0372\r
- 00004863 4D 379 LD C,L\r
- 00004864 C3 13 47 380 JP LWRD ?0381\r
- 00004867 2A 3F 87 381 LD HL,(global)\r
- 0000486A C3 58 47 382 JP LWRD ?0389\r
- 0000486D 23 383 INC HL\r
- 0000486E C3 9F 47 384 JP LWRD ?0396\r
- 00004871 23 385 INC HL\r
- 00004872 C3 E8 47 386 JP LWRD ?0402\r
- 00004875 3E 00 387 LD A,BYTE3 _write\r
- 00004877 C3 32 48 388 JP LWRD ?0407\r
- 0000487A CD FB 81 389 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000487D F1 390 POP AF\r
- 0000487E C3 A3 81 391 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004881 392 Text:\r
- 00004881 C5 393 PUSH BC\r
- 00004882 FD E5 394 PUSH IY\r
- 00004884 DD E5 395 PUSH IX\r
- 00004886 D5 396 PUSH DE\r
- 00004887 DD E1 397 POP IX\r
- 00004889 3E 00 398 LD A,BYTE3 strlen\r
- 0000488B 21 AB 73 399 LD HL,LWRD strlen\r
- 0000488E CD FB 81 400 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004891 E5 401 PUSH HL\r
- 00004892 DD E5 402 PUSH IX\r
- 00004894 C1 403 POP BC\r
- 00004895 2A 3F 87 404 LD HL,(global)\r
- 00004898 23 405 INC HL\r
- 00004899 23 406 INC HL\r
- 0000489A 5E 407 LD E,(HL)\r
- 0000489B 23 408 INC HL\r
- 0000489C 56 409 LD D,(HL)\r
- 0000489D 3E 00 410 LD A,BYTE3 _write\r
- 0000489F 21 72 72 411 LD HL,LWRD _write\r
- 000048A2 CD FB 81 412 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000048A5 F1 413 POP AF\r
- 000048A6 414 ?0411:\r
- 000048A6 DD E1 415 POP IX\r
- 000048A8 FD E1 416 POP IY\r
- 000048AA C1 417 POP BC\r
- 000048AB C3 A9 81 418 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 000048AE 419 TouchRegion:\r
- 000048AE CD 7A 82 420 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000048B1 F8 FF 421 DEFW 65528\r
- 000048B3 21 00 00 422 LD HL,0\r
- 000048B6 39 423 ADD HL,SP\r
- 000048B7 EB 424 EX DE,HL\r
- 000048B8 21 C9 84 425 LD HL,?0008\r
- 000048BB 01 07 00 426 LD BC,7\r
- 000048BE ED B0 427 LDIR\r
- 000048C0 DD 46 02 428 LD B,(IX+2)\r
- 000048C3 DD 70 FA 429 LD (IX-6),B\r
- 000048C6 DD 46 04 430 LD B,(IX+4)\r
- 000048C9 DD 70 FB 431 LD (IX-5),B\r
- 000048CC DD 46 0A 432 LD B,(IX+10)\r
- 000048CF DD 70 FC 433 LD (IX-4),B\r
- 000048D2 DD 46 0C 434 LD B,(IX+12)\r
- 000048D5 DD 70 FD 435 LD (IX-3),B\r
- 000048D8 DD 46 0E 436 LD B,(IX+14)\r
- 000048DB DD 70 FE 437 LD (IX-2),B\r
- 000048DE 21 07 00 438 LD HL,7\r
- 000048E1 E5 439 PUSH HL\r
- 000048E2 2E 02 440 LD L,2\r
- 000048E4 C3 BF 46 441 JP LWRD ?0372\r
- 000048E7 4D 442 LD C,L\r
- 000048E8 C3 13 47 443 JP LWRD ?0381\r
- 000048EB 2A 3F 87 444 LD HL,(global)\r
- 000048EE C3 58 47 445 JP LWRD ?0389\r
- 000048F1 23 446 INC HL\r
- 000048F2 C3 9F 47 447 JP LWRD ?0396\r
- 000048F5 23 448 INC HL\r
- 000048F6 C3 E8 47 449 JP LWRD ?0402\r
- 000048F9 3E 00 450 LD A,BYTE3 _write\r
- 000048FB C3 32 48 451 JP LWRD ?0407\r
- 000048FE CD FB 81 452 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004901 F1 453 POP AF\r
- 00004902 C3 A3 81 454 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004905 455 ClearScreen:\r
- 00004905 C5 456 PUSH BC\r
- 00004906 D5 457 PUSH DE\r
- 00004907 CD 1F 49 458 CALL LWRD ?0461\r
- 0000490A CD FB 81 459 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000490D 21 80 00 460 LD HL,128\r
- 00004910 E5 461 PUSH HL\r
- 00004911 6C 462 LD L,H\r
- 00004912 E5 463 PUSH HL\r
- 00004913 E5 464 PUSH HL\r
- 00004914 CD 37 49 465 CALL LWRD ?0470\r
- 00004917 E1 466 POP HL\r
- 00004918 E1 467 POP HL\r
- 00004919 E1 468 POP HL\r
- 0000491A D1 469 POP DE\r
- 0000491B C1 470 POP BC\r
- 0000491C C3 A9 81 471 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 0000491F 472 ?0461:\r
- 0000491F 01 00 00 473 LD BC,0\r
- 00004922 59 474 LD E,C\r
- 00004923 50 475 LD D,B\r
- 00004924 3E 00 476 LD A,BYTE3 Move\r
- 00004926 21 EB 46 477 LD HL,LWRD Move\r
- 00004929 CD FB 81 478 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000492C 01 80 00 479 LD BC,128\r
- 0000492F 58 480 LD E,B\r
- 00004930 50 481 LD D,B\r
- 00004931 3E 00 482 LD A,BYTE3 ClearRect\r
- 00004933 21 2A 47 483 LD HL,LWRD ClearRect\r
- 00004936 C9 484 RET\r
- 00004937 485 ?0470:\r
- 00004937 4D 486 LD C,L\r
- 00004938 44 487 LD B,H\r
- 00004939 EB 488 EX DE,HL\r
- 0000493A 489 ?0471:\r
- 0000493A 3E 00 490 LD A,BYTE3 TouchRegion\r
- 0000493C 21 AE 48 491 LD HL,LWRD TouchRegion\r
- 0000493F C3 FB 81 492 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00004942 493 EnableScreen:\r
- 00004942 CD 7A 82 494 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004945 FC FF 495 DEFW 65532\r
- 00004947 21 00 00 496 LD HL,0\r
- 0000494A 39 497 ADD HL,SP\r
- 0000494B EB 498 EX DE,HL\r
- 0000494C 21 D0 84 499 LD HL,?0009\r
- 0000494F 01 03 00 500 LD BC,3\r
- 00004952 ED B0 501 LDIR\r
- 00004954 DD 46 02 502 LD B,(IX+2)\r
- 00004957 DD 70 FE 503 LD (IX-2),B\r
- 0000495A 21 03 00 504 LD HL,3\r
- 0000495D E5 505 PUSH HL\r
- 0000495E 2B 506 DEC HL\r
- 0000495F C3 BF 46 507 JP LWRD ?0372\r
- 00004962 4D 508 LD C,L\r
- 00004963 C3 13 47 509 JP LWRD ?0381\r
- 00004966 2A 3F 87 510 LD HL,(global)\r
- 00004969 C3 58 47 511 JP LWRD ?0389\r
- 0000496C 23 512 INC HL\r
- 0000496D C3 9F 47 513 JP LWRD ?0396\r
- 00004970 23 514 INC HL\r
- 00004971 C3 E8 47 515 JP LWRD ?0402\r
- 00004974 3E 00 516 LD A,BYTE3 _write\r
- 00004976 C3 32 48 517 JP LWRD ?0407\r
- 00004979 CD FB 81 518 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000497C F1 519 POP AF\r
- 0000497D C3 A3 81 520 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004980 521 grSetFont:\r
- 00004980 CD 7A 82 522 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004983 FE FF 523 DEFW 65534\r
- 00004985 21 00 00 524 LD HL,0\r
- 00004988 39 525 ADD HL,SP\r
- 00004989 EB 526 EX DE,HL\r
- 0000498A 21 D3 84 527 LD HL,?0010\r
- 0000498D 01 02 00 528 LD BC,2\r
- 00004990 ED B0 529 LDIR\r
- 00004992 DD 46 02 530 LD B,(IX+2)\r
- 00004995 DD 70 FF 531 LD (IX-1),B\r
- 00004998 21 02 00 532 LD HL,2\r
- 0000499B E5 533 PUSH HL\r
- 0000499C C3 BF 46 534 JP LWRD ?0372\r
- 0000499F 4D 535 LD C,L\r
- 000049A0 C3 13 47 536 JP LWRD ?0381\r
- 000049A3 2A 3F 87 537 LD HL,(global)\r
- 000049A6 C3 58 47 538 JP LWRD ?0389\r
- 000049A9 23 539 INC HL\r
- 000049AA C3 9F 47 540 JP LWRD ?0396\r
- 000049AD 23 541 INC HL\r
- 000049AE C3 E8 47 542 JP LWRD ?0402\r
- 000049B1 3E 00 543 LD A,BYTE3 _write\r
- 000049B3 C3 32 48 544 JP LWRD ?0407\r
- 000049B6 CD FB 81 545 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000049B9 F1 546 POP AF\r
- 000049BA C3 A3 81 547 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000049BD 548 fontSearch:\r
- 000049BD CD 7A 82 549 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000049C0 00 00 550 DEFW 0\r
- 000049C2 21 0C 00 551 LD HL,12\r
- 000049C5 ED 4B 3F 87 552 LD BC,(global)\r
- 000049C9 09 553 ADD HL,BC\r
- 000049CA 554 ?0321:\r
- 000049CA 46 555 LD B,(HL)\r
- 000049CB 23 556 INC HL\r
- 000049CC 66 557 LD H,(HL)\r
- 000049CD 68 558 LD L,B\r
- 000049CE EB 559 EX DE,HL\r
- 000049CF 560 ?0012:\r
- 000049CF 7B 561 LD A,E\r
- 000049D0 B2 562 OR D\r
- 000049D1 28 16 563 JR Z,?0011\r
- 000049D3 6B 564 LD L,E\r
- 000049D4 62 565 LD H,D\r
- 000049D5 46 566 LD B,(HL)\r
- 000049D6 23 567 INC HL\r
- 000049D7 66 568 LD H,(HL)\r
- 000049D8 68 569 LD L,B\r
- 000049D9 DD 4E 02 570 LD C,(IX+2)\r
- 000049DC DD 46 03 571 LD B,(IX+3)\r
- 000049DF ED 42 572 SBC HL,BC\r
- 000049E1 28 06 573 JR Z,?0011\r
- 000049E3 574 ?0015:\r
- 000049E3 575 ?0014:\r
- 000049E3 576 ?0013:\r
- 000049E3 21 08 00 577 LD HL,8\r
- 000049E6 19 578 ADD HL,DE\r
- 000049E7 18 E1 579 JR ?0321\r
- 000049E9 580 ?0011:\r
- 000049E9 EB 581 EX DE,HL\r
- 000049EA C3 A3 81 582 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000049ED 583 setCurrentFont:\r
- 000049ED CD EF 81 584 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 000049F0 3E 00 585 LD A,BYTE3 fontSearch\r
- 000049F2 21 BD 49 586 LD HL,LWRD fontSearch\r
- 000049F5 CD 6A 4A 587 CALL LWRD ?0448\r
- 000049F8 28 29 588 JR Z,?0017\r
- 000049FA 589 ?0016:\r
- 000049FA DD 5E 02 590 LD E,(IX+2)\r
- 000049FD DD 56 03 591 LD D,(IX+3)\r
- 00004A00 3E 00 592 LD A,BYTE3 grSetFont\r
- 00004A02 21 80 49 593 LD HL,LWRD grSetFont\r
- 00004A05 CD FB 81 594 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004A08 21 0A 00 595 LD HL,10\r
- 00004A0B ED 4B 3F 87 596 LD BC,(global)\r
- 00004A0F 09 597 ADD HL,BC\r
- 00004A10 E5 598 PUSH HL\r
- 00004A11 DD 5E 02 599 LD E,(IX+2)\r
- 00004A14 DD 56 03 600 LD D,(IX+3)\r
- 00004A17 3E 00 601 LD A,BYTE3 fontSearch\r
- 00004A19 21 BD 49 602 LD HL,LWRD fontSearch\r
- 00004A1C CD 75 4A 603 CALL LWRD ?0449\r
- 00004A1F E1 604 POP HL\r
- 00004A20 71 605 LD (HL),C\r
- 00004A21 23 606 INC HL\r
- 00004A22 70 607 LD (HL),B\r
- 00004A23 608 ?0017:\r
- 00004A23 C3 A3 81 609 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004A26 610 ?0443:\r
- 00004A26 ED 4B 3F 87 611 LD BC,(global)\r
- 00004A2A 09 612 ADD HL,BC\r
- 00004A2B 46 613 LD B,(HL)\r
- 00004A2C 23 614 INC HL\r
- 00004A2D 66 615 LD H,(HL)\r
- 00004A2E 68 616 LD L,B\r
- 00004A2F 617 ?0442:\r
- 00004A2F 23 618 INC HL\r
- 00004A30 23 619 INC HL\r
- 00004A31 4E 620 LD C,(HL)\r
- 00004A32 23 621 INC HL\r
- 00004A33 46 622 LD B,(HL)\r
- 00004A34 23 623 INC HL\r
- 00004A35 7E 624 LD A,(HL)\r
- 00004A36 69 625 LD L,C\r
- 00004A37 60 626 LD H,B\r
- 00004A38 CD FB 81 627 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004A3B 4D 628 LD C,L\r
- 00004A3C 44 629 LD B,H\r
- 00004A3D FD 6E 06 630 LD L,(IY+6)\r
- 00004A40 FD 66 07 631 LD H,(IY+7)\r
- 00004A43 A7 632 AND A\r
- 00004A44 ED 42 633 SBC HL,BC\r
- 00004A46 EB 634 EX DE,HL\r
- 00004A47 01 02 00 635 LD BC,2\r
- 00004A4A CD EB 82 636 CALL LWRD ?SS_DIV_L02\r
- 00004A4D DD 6E 04 637 LD L,(IX+4)\r
- 00004A50 DD 66 05 638 LD H,(IX+5)\r
- 00004A53 19 639 ADD HL,DE\r
- 00004A54 EB 640 EX DE,HL\r
- 00004A55 3E 00 641 LD A,BYTE3 Move\r
- 00004A57 21 EB 46 642 LD HL,LWRD Move\r
- 00004A5A C9 643 RET\r
- 00004A5B 644 ?0444:\r
- 00004A5B CD FB 81 645 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004A5E 4D 646 LD C,L\r
- 00004A5F 44 647 LD B,H\r
- 00004A60 FD 6E 08 648 LD L,(IY+8)\r
- 00004A63 FD 66 09 649 LD H,(IY+9)\r
- 00004A66 A7 650 AND A\r
- 00004A67 ED 42 651 SBC HL,BC\r
- 00004A69 C9 652 RET\r
- 00004A6A 653 ?0448:\r
- 00004A6A CD FB 81 654 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004A6D 7D 655 LD A,L\r
- 00004A6E B4 656 OR H\r
- 00004A6F C9 657 RET\r
- 00004A70 658 ?0450:\r
- 00004A70 3E 01 659 LD A,BYTE3 malloc\r
- 00004A72 21 00 40 660 LD HL,LWRD malloc\r
- 00004A75 661 ?0449:\r
- 00004A75 CD FB 81 662 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004A78 4D 663 LD C,L\r
- 00004A79 44 664 LD B,H\r
- 00004A7A C9 665 RET\r
- 00004A7B 666 loadFont:\r
- 00004A7B CD 7A 82 667 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004A7E FC FF 668 DEFW 65532\r
- 00004A80 FD E5 669 PUSH IY\r
- 00004A82 11 0E 00 670 LD DE,14\r
- 00004A85 CD 16 4B 671 CALL LWRD ?0447\r
- 00004A88 DD 4E 02 672 LD C,(IX+2)\r
- 00004A8B 71 673 LD (HL),C\r
- 00004A8C DD 46 03 674 LD B,(IX+3)\r
- 00004A8F 23 675 INC HL\r
- 00004A90 70 676 LD (HL),B\r
- 00004A91 DD 46 0C 677 LD B,(IX+12)\r
- 00004A94 DD 6E 0A 678 LD L,(IX+10)\r
- 00004A97 FD 75 02 679 LD (IY+2),L\r
- 00004A9A DD 66 0B 680 LD H,(IX+11)\r
- 00004A9D FD 74 03 681 LD (IY+3),H\r
- 00004AA0 FD 70 04 682 LD (IY+4),B\r
- 00004AA3 DD 46 10 683 LD B,(IX+16)\r
- 00004AA6 DD 6E 0E 684 LD L,(IX+14)\r
- 00004AA9 FD 75 05 685 LD (IY+5),L\r
- 00004AAC DD 66 0F 686 LD H,(IX+15)\r
- 00004AAF FD 74 06 687 LD (IY+6),H\r
- 00004AB2 FD 70 07 688 LD (IY+7),B\r
- 00004AB5 AF 689 XOR A\r
- 00004AB6 FD 77 08 690 LD (IY+8),A\r
- 00004AB9 FD 77 09 691 LD (IY+9),A\r
- 00004ABC DD 6E 12 692 LD L,(IX+18)\r
- 00004ABF FD 75 0A 693 LD (IY+10),L\r
- 00004AC2 DD 66 13 694 LD H,(IX+19)\r
- 00004AC5 FD 74 0B 695 LD (IY+11),H\r
- 00004AC8 DD 6E 14 696 LD L,(IX+20)\r
- 00004ACB FD 75 0C 697 LD (IY+12),L\r
- 00004ACE DD 66 15 698 LD H,(IX+21)\r
- 00004AD1 FD 74 0D 699 LD (IY+13),H\r
- 00004AD4 21 0C 00 700 LD HL,12\r
- 00004AD7 ED 4B 3F 87 701 LD BC,(global)\r
- 00004ADB 09 702 ADD HL,BC\r
- 00004ADC 7E 703 LD A,(HL)\r
- 00004ADD 23 704 INC HL\r
- 00004ADE B6 705 OR (HL)\r
- 00004ADF 21 0C 00 706 LD HL,12\r
- 00004AE2 ED 4B 3F 87 707 LD BC,(global)\r
- 00004AE6 09 708 ADD HL,BC\r
- 00004AE7 20 10 709 JR NZ,?0019\r
- 00004AE9 710 ?0018:\r
- 00004AE9 FD E5 711 PUSH IY\r
- 00004AEB C1 712 POP BC\r
- 00004AEC 71 713 LD (HL),C\r
- 00004AED 23 714 INC HL\r
- 00004AEE 70 715 LD (HL),B\r
- 00004AEF 21 0A 00 716 LD HL,10\r
- 00004AF2 ED 4B 3F 87 717 LD BC,(global)\r
- 00004AF6 09 718 ADD HL,BC\r
- 00004AF7 18 12 719 JR ?0021\r
- 00004AF9 720 ?0019:\r
- 00004AF9 46 721 LD B,(HL)\r
- 00004AFA 23 722 INC HL\r
- 00004AFB 66 723 LD H,(HL)\r
- 00004AFC 68 724 LD L,B\r
- 00004AFD EB 725 EX DE,HL\r
- 00004AFE 726 ?0022:\r
- 00004AFE 21 08 00 727 LD HL,8\r
- 00004B01 19 728 ADD HL,DE\r
- 00004B02 7E 729 LD A,(HL)\r
- 00004B03 23 730 INC HL\r
- 00004B04 B6 731 OR (HL)\r
- 00004B05 21 08 00 732 LD HL,8\r
- 00004B08 19 733 ADD HL,DE\r
- 00004B09 20 EE 734 JR NZ,?0019\r
- 00004B0B 735 ?0023:\r
- 00004B0B 736 ?0021:\r
- 00004B0B FD E5 737 PUSH IY\r
- 00004B0D C1 738 POP BC\r
- 00004B0E 71 739 LD (HL),C\r
- 00004B0F 23 740 INC HL\r
- 00004B10 70 741 LD (HL),B\r
- 00004B11 742 ?0020:\r
- 00004B11 FD E1 743 POP IY\r
- 00004B13 C3 A3 81 744 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004B16 745 ?0447:\r
- 00004B16 3E 01 746 LD A,BYTE3 malloc\r
- 00004B18 21 00 40 747 LD HL,LWRD malloc\r
- 00004B1B CD FB 81 748 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004B1E E5 749 PUSH HL\r
- 00004B1F FD E1 750 POP IY\r
- 00004B21 C9 751 RET\r
- 00004B22 752 stringwidth:\r
- 00004B22 FD E5 753 PUSH IY\r
- 00004B24 DD E5 754 PUSH IX\r
- 00004B26 C5 755 PUSH BC\r
- 00004B27 D5 756 PUSH DE\r
- 00004B28 DD 21 00 00 757 LD IX,0\r
- 00004B2C FD 21 00 00 758 LD IY,0\r
- 00004B30 759 ?0025:\r
- 00004B30 FD E5 760 PUSH IY\r
- 00004B32 21 02 00 761 LD HL,2\r
- 00004B35 39 762 ADD HL,SP\r
- 00004B36 4E 763 LD C,(HL)\r
- 00004B37 23 764 INC HL\r
- 00004B38 46 765 LD B,(HL)\r
- 00004B39 E1 766 POP HL\r
- 00004B3A 09 767 ADD HL,BC\r
- 00004B3B 7E 768 LD A,(HL)\r
- 00004B3C B7 769 OR A\r
- 00004B3D 28 50 770 JR Z,?0024\r
- 00004B3F 771 ?0026:\r
- 00004B3F FD E5 772 PUSH IY\r
- 00004B41 E1 773 POP HL\r
- 00004B42 09 774 ADD HL,BC\r
- 00004B43 5E 775 LD E,(HL)\r
- 00004B44 CD C4 81 776 CALL LWRD ?C_V_SWITCH_L06\r
- 00004B47 0A 00 777 DEFW 10\r
- 00004B49 21 778 DEFB 33\r
- 00004B4A 2C 779 DEFB 44\r
- 00004B4B 2E 780 DEFB 46\r
- 00004B4C 31 781 DEFB 49\r
- 00004B4D 49 782 DEFB 73\r
- 00004B4E 69 783 DEFB 105\r
- 00004B4F 6A 784 DEFB 106\r
- 00004B50 6B 785 DEFB 107\r
- 00004B51 6C 786 DEFB 108\r
- 00004B52 72 787 DEFB 114\r
- 00004B53 7D 4B 788 DEFW ?0032\r
- 00004B55 78 4B 789 DEFW ?0031\r
- 00004B57 6E 4B 790 DEFW ?0029\r
- 00004B59 78 4B 791 DEFW ?0031\r
- 00004B5B 78 4B 792 DEFW ?0031\r
- 00004B5D 69 4B 793 DEFW ?0028\r
- 00004B5F 69 4B 794 DEFW ?0028\r
- 00004B61 73 4B 795 DEFW ?0030\r
- 00004B63 73 4B 796 DEFW ?0030\r
- 00004B65 73 4B 797 DEFW ?0030\r
- 00004B67 69 4B 798 DEFW ?0028\r
- 00004B69 799 ?0028:\r
- 00004B69 01 02 00 800 LD BC,2\r
- 00004B6C 18 12 801 JR ?0331\r
- 00004B6E 802 ?0029:\r
- 00004B6E 01 03 00 803 LD BC,3\r
- 00004B71 18 0D 804 JR ?0331\r
- 00004B73 805 ?0030:\r
- 00004B73 01 04 00 806 LD BC,4\r
- 00004B76 18 08 807 JR ?0331\r
- 00004B78 808 ?0031:\r
- 00004B78 01 05 00 809 LD BC,5\r
- 00004B7B 18 03 810 JR ?0331\r
- 00004B7D 811 ?0032:\r
- 00004B7D 01 06 00 812 LD BC,6\r
- 00004B80 813 ?0331:\r
- 00004B80 DD 09 814 ADD IX,BC\r
- 00004B82 815 ?0027:\r
- 00004B82 21 02 00 816 LD HL,2\r
- 00004B85 39 817 ADD HL,SP\r
- 00004B86 4E 818 LD C,(HL)\r
- 00004B87 23 819 INC HL\r
- 00004B88 46 820 LD B,(HL)\r
- 00004B89 DD 09 821 ADD IX,BC\r
- 00004B8B FD 23 822 INC IY\r
- 00004B8D 18 A1 823 JR ?0025\r
- 00004B8F 824 ?0024:\r
- 00004B8F DD E5 825 PUSH IX\r
- 00004B91 E1 826 POP HL\r
- 00004B92 F1 827 POP AF\r
- 00004B93 F1 828 POP AF\r
- 00004B94 DD E1 829 POP IX\r
- 00004B96 FD E1 830 POP IY\r
- 00004B98 C3 A9 81 831 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 00004B9B 832 stringheight:\r
- 00004B9B CD EF 81 833 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00004B9E 7B 834 LD A,E\r
- 00004B9F FE 80 835 CP 128\r
- 00004BA1 30 06 836 JR NC,?0034\r
- 00004BA3 837 ?0033:\r
- 00004BA3 21 07 00 838 LD HL,7\r
- 00004BA6 09 839 ADD HL,BC\r
- 00004BA7 18 0C 840 JR ?0036\r
- 00004BA9 841 ?0034:\r
- 00004BA9 FE CC 842 CP 204\r
- 00004BAB 38 08 843 JR C,?0036\r
- 00004BAD 3E DF 844 LD A,223\r
- 00004BAF BB 845 CP E\r
- 00004BB0 38 03 846 JR C,?0036\r
- 00004BB2 847 ?0038:\r
- 00004BB2 848 ?0037:\r
- 00004BB2 849 ?0035:\r
- 00004BB2 69 850 LD L,C\r
- 00004BB3 60 851 LD H,B\r
- 00004BB4 23 852 INC HL\r
- 00004BB5 853 ?0036:\r
- 00004BB5 854 ?0039:\r
- 00004BB5 C3 A3 81 855 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004BB8 856 stringheight01:\r
- 00004BB8 CD EF 81 857 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00004BBB 01 00 00 858 LD BC,0\r
- 00004BBE 859 ?0415:\r
- 00004BBE 1A 860 LD A,(DE)\r
- 00004BBF 5F 861 LD E,A\r
- 00004BC0 3E 00 862 LD A,BYTE3 stringheight\r
- 00004BC2 21 9B 4B 863 LD HL,LWRD stringheight\r
- 00004BC5 CD FB 81 864 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004BC8 C3 A3 81 865 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004BCB 866 stringheight2:\r
- 00004BCB CD EF 81 867 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00004BCE 01 05 00 868 LD BC,5\r
- 00004BD1 C3 BE 4B 869 JP LWRD ?0415\r
- 00004BD4 870 stringwidth0:\r
- 00004BD4 CD EF 81 871 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00004BD7 01 00 00 872 LD BC,0\r
- 00004BDA 873 ?0416:\r
- 00004BDA 3E 00 874 LD A,BYTE3 stringwidth\r
- 00004BDC 21 22 4B 875 LD HL,LWRD stringwidth\r
- 00004BDF CD FB 81 876 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004BE2 C3 A3 81 877 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004BE5 878 stringwidth1:\r
- 00004BE5 CD EF 81 879 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00004BE8 01 02 00 880 LD BC,2\r
- 00004BEB C3 DA 4B 881 JP LWRD ?0416\r
- 00004BEE 882 stringwidth2:\r
- 00004BEE CD EF 81 883 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00004BF1 01 03 00 884 LD BC,3\r
- 00004BF4 C3 DA 4B 885 JP LWRD ?0416\r
- 00004BF7 886 Component_new:\r
- 00004BF7 CD 7A 82 887 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004BFA 00 00 888 DEFW 0\r
- 00004BFC FD E5 889 PUSH IY\r
- 00004BFE 11 28 00 890 LD DE,40\r
- 00004C01 CD 16 4B 891 CALL LWRD ?0447\r
- 00004C04 2A 3F 87 892 LD HL,(global)\r
- 00004C07 5E 893 LD E,(HL)\r
- 00004C08 23 894 INC HL\r
- 00004C09 56 895 LD D,(HL)\r
- 00004C0A 13 896 INC DE\r
- 00004C0B 72 897 LD (HL),D\r
- 00004C0C 2B 898 DEC HL\r
- 00004C0D 73 899 LD (HL),E\r
- 00004C0E FD E5 900 PUSH IY\r
- 00004C10 E1 901 POP HL\r
- 00004C11 73 902 LD (HL),E\r
- 00004C12 23 903 INC HL\r
- 00004C13 72 904 LD (HL),D\r
- 00004C14 DD 6E 02 905 LD L,(IX+2)\r
- 00004C17 FD 75 02 906 LD (IY+2),L\r
- 00004C1A DD 66 03 907 LD H,(IX+3)\r
- 00004C1D FD 74 03 908 LD (IY+3),H\r
- 00004C20 FD 71 04 909 LD (IY+4),C\r
- 00004C23 FD 70 05 910 LD (IY+5),B\r
- 00004C26 DD 6E 0A 911 LD L,(IX+10)\r
- 00004C29 FD 75 06 912 LD (IY+6),L\r
- 00004C2C DD 66 0B 913 LD H,(IX+11)\r
- 00004C2F FD 74 07 914 LD (IY+7),H\r
- 00004C32 DD 6E 0C 915 LD L,(IX+12)\r
- 00004C35 FD 75 08 916 LD (IY+8),L\r
- 00004C38 DD 66 0D 917 LD H,(IX+13)\r
- 00004C3B FD 74 09 918 LD (IY+9),H\r
- 00004C3E AF 919 XOR A\r
- 00004C3F FD 77 0A 920 LD (IY+10),A\r
- 00004C42 FD 77 0B 921 LD (IY+11),A\r
- 00004C45 FD 77 0C 922 LD (IY+12),A\r
- 00004C48 FD 77 0D 923 LD (IY+13),A\r
- 00004C4B FD 77 0E 924 LD (IY+14),A\r
- 00004C4E FD 77 0F 925 LD (IY+15),A\r
- 00004C51 FD 77 10 926 LD (IY+16),A\r
- 00004C54 FD 77 11 927 LD (IY+17),A\r
- 00004C57 FD 77 12 928 LD (IY+18),A\r
- 00004C5A FD 77 13 929 LD (IY+19),A\r
- 00004C5D FD 77 14 930 LD (IY+20),A\r
- 00004C60 FD 77 15 931 LD (IY+21),A\r
- 00004C63 FD 77 16 932 LD (IY+22),A\r
- 00004C66 FD 77 17 933 LD (IY+23),A\r
- 00004C69 FD 77 18 934 LD (IY+24),A\r
- 00004C6C FD 77 19 935 LD (IY+25),A\r
- 00004C6F FD 77 1A 936 LD (IY+26),A\r
- 00004C72 FD 77 1B 937 LD (IY+27),A\r
- 00004C75 FD 77 1C 938 LD (IY+28),A\r
- 00004C78 FD 77 1D 939 LD (IY+29),A\r
- 00004C7B FD 77 1E 940 LD (IY+30),A\r
- 00004C7E FD 77 1F 941 LD (IY+31),A\r
- 00004C81 FD 77 24 942 LD (IY+36),A\r
- 00004C84 FD 77 25 943 LD (IY+37),A\r
- 00004C87 FD 77 26 944 LD (IY+38),A\r
- 00004C8A FD 77 27 945 LD (IY+39),A\r
- 00004C8D FD 77 20 946 LD (IY+32),A\r
- 00004C90 FD 77 21 947 LD (IY+33),A\r
- 00004C93 FD 77 22 948 LD (IY+34),A\r
- 00004C96 FD 77 23 949 LD (IY+35),A\r
- 00004C99 950 ?0418:\r
- 00004C99 FD E5 951 PUSH IY\r
- 00004C9B E1 952 POP HL\r
- 00004C9C FD E1 953 POP IY\r
- 00004C9E C3 A3 81 954 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004CA1 955 Component_setlabel:\r
- 00004CA1 CD 7A 82 956 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004CA4 00 00 957 DEFW 0\r
- 00004CA6 FD E5 958 PUSH IY\r
- 00004CA8 DD 6E 02 959 LD L,(IX+2)\r
- 00004CAB DD 66 03 960 LD H,(IX+3)\r
- 00004CAE E5 961 PUSH HL\r
- 00004CAF FD E1 962 POP IY\r
- 00004CB1 11 00 00 963 LD DE,0\r
- 00004CB4 964 ?0041:\r
- 00004CB4 DD 6E 04 965 LD L,(IX+4)\r
- 00004CB7 DD 66 05 966 LD H,(IX+5)\r
- 00004CBA 19 967 ADD HL,DE\r
- 00004CBB 7E 968 LD A,(HL)\r
- 00004CBC B7 969 OR A\r
- 00004CBD 28 21 970 JR Z,?0040\r
- 00004CBF 01 14 80 971 LD BC,32788\r
- 00004CC2 6B 972 LD L,E\r
- 00004CC3 62 973 LD H,D\r
- 00004CC4 78 974 LD A,B\r
- 00004CC5 AC 975 XOR H\r
- 00004CC6 67 976 LD H,A\r
- 00004CC7 ED 42 977 SBC HL,BC\r
- 00004CC9 30 15 978 JR NC,?0040\r
- 00004CCB 979 ?0044:\r
- 00004CCB 980 ?0043:\r
- 00004CCB 981 ?0042:\r
- 00004CCB FD 6E 20 982 LD L,(IY+32)\r
- 00004CCE FD 66 21 983 LD H,(IY+33)\r
- 00004CD1 19 984 ADD HL,DE\r
- 00004CD2 E5 985 PUSH HL\r
- 00004CD3 DD 6E 04 986 LD L,(IX+4)\r
- 00004CD6 DD 66 05 987 LD H,(IX+5)\r
- 00004CD9 19 988 ADD HL,DE\r
- 00004CDA 46 989 LD B,(HL)\r
- 00004CDB E1 990 POP HL\r
- 00004CDC 70 991 LD (HL),B\r
- 00004CDD 13 992 INC DE\r
- 00004CDE 18 D4 993 JR ?0041\r
- 00004CE0 994 ?0040:\r
- 00004CE0 FD 6E 20 995 LD L,(IY+32)\r
- 00004CE3 FD 66 21 996 LD H,(IY+33)\r
- 00004CE6 19 997 ADD HL,DE\r
- 00004CE7 36 00 998 LD (HL),0\r
- 00004CE9 FD E1 999 POP IY\r
- 00004CEB C3 A3 81 1000 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004CEE 1001 Component_add:\r
- 00004CEE CD 7A 82 1002 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004CF1 00 00 1003 DEFW 0\r
- 00004CF3 FD E5 1004 PUSH IY\r
- 00004CF5 59 1005 LD E,C\r
- 00004CF6 50 1006 LD D,B\r
- 00004CF7 21 15 00 1007 LD HL,21\r
- 00004CFA DD 4E 02 1008 LD C,(IX+2)\r
- 00004CFD DD 46 03 1009 LD B,(IX+3)\r
- 00004D00 09 1010 ADD HL,BC\r
- 00004D01 7E 1011 LD A,(HL)\r
- 00004D02 23 1012 INC HL\r
- 00004D03 66 1013 LD H,(HL)\r
- 00004D04 6F 1014 LD L,A\r
- 00004D05 E5 1015 PUSH HL\r
- 00004D06 FD E1 1016 POP IY\r
- 00004D08 21 15 00 1017 LD HL,21\r
- 00004D0B 09 1018 ADD HL,BC\r
- 00004D0C 7E 1019 LD A,(HL)\r
- 00004D0D 23 1020 INC HL\r
- 00004D0E B6 1021 OR (HL)\r
- 00004D0F 20 09 1022 JR NZ,?0046\r
- 00004D11 1023 ?0045:\r
- 00004D11 21 15 00 1024 LD HL,21\r
- 00004D14 09 1025 ADD HL,BC\r
- 00004D15 73 1026 LD (HL),E\r
- 00004D16 23 1027 INC HL\r
- 00004D17 72 1028 LD (HL),D\r
- 00004D18 18 19 1029 JR ?0335\r
- 00004D1A 1030 ?0046:\r
- 00004D1A 1031 ?0049:\r
- 00004D1A FD 7E 13 1032 LD A,(IY+19)\r
- 00004D1D FD B6 14 1033 OR (IY+20)\r
- 00004D20 28 0B 1034 JR Z,?0048\r
- 00004D22 1035 ?0050:\r
- 00004D22 FD 6E 13 1036 LD L,(IY+19)\r
- 00004D25 FD 66 14 1037 LD H,(IY+20)\r
- 00004D28 E5 1038 PUSH HL\r
- 00004D29 FD E1 1039 POP IY\r
- 00004D2B 18 ED 1040 JR ?0046\r
- 00004D2D 1041 ?0048:\r
- 00004D2D FD 73 13 1042 LD (IY+19),E\r
- 00004D30 FD 72 14 1043 LD (IY+20),D\r
- 00004D33 1044 ?0335:\r
- 00004D33 21 13 00 1045 LD HL,19\r
- 00004D36 19 1046 ADD HL,DE\r
- 00004D37 77 1047 LD (HL),A\r
- 00004D38 23 1048 INC HL\r
- 00004D39 77 1049 LD (HL),A\r
- 00004D3A 1050 ?0047:\r
- 00004D3A 21 11 00 1051 LD HL,17\r
- 00004D3D 19 1052 ADD HL,DE\r
- 00004D3E DD 4E 02 1053 LD C,(IX+2)\r
- 00004D41 71 1054 LD (HL),C\r
- 00004D42 DD 46 03 1055 LD B,(IX+3)\r
- 00004D45 23 1056 INC HL\r
- 00004D46 70 1057 LD (HL),B\r
- 00004D47 FD E1 1058 POP IY\r
- 00004D49 C3 A3 81 1059 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004D4C 1060 Component_paint:\r
- 00004D4C C5 1061 PUSH BC\r
- 00004D4D FD E5 1062 PUSH IY\r
- 00004D4F DD E5 1063 PUSH IX\r
- 00004D51 21 15 00 1064 LD HL,21\r
- 00004D54 19 1065 ADD HL,DE\r
- 00004D55 46 1066 LD B,(HL)\r
- 00004D56 23 1067 INC HL\r
- 00004D57 66 1068 LD H,(HL)\r
- 00004D58 68 1069 LD L,B\r
- 00004D59 E5 1070 PUSH HL\r
- 00004D5A DD E1 1071 POP IX\r
- 00004D5C CD 88 4D 1072 CALL LWRD ?0477\r
- 00004D5F 1073 ?0052:\r
- 00004D5F DD E5 1074 PUSH IX\r
- 00004D61 E1 1075 POP HL\r
- 00004D62 7D 1076 LD A,L\r
- 00004D63 B4 1077 OR H\r
- 00004D64 28 1A 1078 JR Z,?0051\r
- 00004D66 1079 ?0053:\r
- 00004D66 DD E5 1080 PUSH IX\r
- 00004D68 D1 1081 POP DE\r
- 00004D69 DD 7E 1C 1082 LD A,(IX+28)\r
- 00004D6C DD 6E 1A 1083 LD L,(IX+26)\r
- 00004D6F DD 66 1B 1084 LD H,(IX+27)\r
- 00004D72 CD FB 81 1085 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00004D75 DD 6E 13 1086 LD L,(IX+19)\r
- 00004D78 DD 66 14 1087 LD H,(IX+20)\r
- 00004D7B E5 1088 PUSH HL\r
- 00004D7C DD E1 1089 POP IX\r
- 00004D7E 18 DF 1090 JR ?0052\r
- 00004D80 1091 ?0051:\r
- 00004D80 1E 01 1092 LD E,1\r
- 00004D82 CD 8A 4D 1093 CALL LWRD ?0478\r
- 00004D85 C3 A6 48 1094 JP LWRD ?0411\r
- 00004D88 1095 ?0477:\r
- 00004D88 1E 00 1096 LD E,0\r
- 00004D8A 1097 ?0478:\r
- 00004D8A 3E 00 1098 LD A,BYTE3 EnableScreen\r
- 00004D8C 21 42 49 1099 LD HL,LWRD EnableScreen\r
- 00004D8F C3 FB 81 1100 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00004D92 1101 Component_findXY:\r
- 00004D92 CD 7A 82 1102 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004D95 00 00 1103 DEFW 0\r
- 00004D97 FD E5 1104 PUSH IY\r
- 00004D99 DD 6E 02 1105 LD L,(IX+2)\r
- 00004D9C DD 66 03 1106 LD H,(IX+3)\r
- 00004D9F E5 1107 PUSH HL\r
- 00004DA0 FD E1 1108 POP IY\r
- 00004DA2 1109 ?0056:\r
- 00004DA2 DD 6E 04 1110 LD L,(IX+4)\r
- 00004DA5 DD 66 05 1111 LD H,(IX+5)\r
- 00004DA8 7E 1112 LD A,(HL)\r
- 00004DA9 FD 86 02 1113 ADD A,(IY+2)\r
- 00004DAC 77 1114 LD (HL),A\r
- 00004DAD 23 1115 INC HL\r
- 00004DAE 7E 1116 LD A,(HL)\r
- 00004DAF FD 8E 03 1117 ADC A,(IY+3)\r
- 00004DB2 77 1118 LD (HL),A\r
- 00004DB3 DD 6E 0A 1119 LD L,(IX+10)\r
- 00004DB6 DD 66 0B 1120 LD H,(IX+11)\r
- 00004DB9 7E 1121 LD A,(HL)\r
- 00004DBA FD 86 04 1122 ADD A,(IY+4)\r
- 00004DBD 77 1123 LD (HL),A\r
- 00004DBE 23 1124 INC HL\r
- 00004DBF 7E 1125 LD A,(HL)\r
- 00004DC0 FD 8E 05 1126 ADC A,(IY+5)\r
- 00004DC3 77 1127 LD (HL),A\r
- 00004DC4 FD 6E 11 1128 LD L,(IY+17)\r
- 00004DC7 FD 66 12 1129 LD H,(IY+18)\r
- 00004DCA E5 1130 PUSH HL\r
- 00004DCB FD E1 1131 POP IY\r
- 00004DCD 7D 1132 LD A,L\r
- 00004DCE B4 1133 OR H\r
- 00004DCF 20 D1 1134 JR NZ,?0056\r
- 00004DD1 1135 ?0054:\r
- 00004DD1 FD E1 1136 POP IY\r
- 00004DD3 C3 A3 81 1137 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004DD6 1138 Component_find:\r
- 00004DD6 CD 7A 82 1139 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004DD9 00 00 1140 DEFW 0\r
- 00004DDB 21 15 00 1141 LD HL,21\r
- 00004DDE DD 4E 02 1142 LD C,(IX+2)\r
- 00004DE1 DD 46 03 1143 LD B,(IX+3)\r
- 00004DE4 09 1144 ADD HL,BC\r
- 00004DE5 1145 ?0336:\r
- 00004DE5 46 1146 LD B,(HL)\r
- 00004DE6 23 1147 INC HL\r
- 00004DE7 66 1148 LD H,(HL)\r
- 00004DE8 68 1149 LD L,B\r
- 00004DE9 EB 1150 EX DE,HL\r
- 00004DEA 1151 ?0058:\r
- 00004DEA 7B 1152 LD A,E\r
- 00004DEB B2 1153 OR D\r
- 00004DEC 28 1B 1154 JR Z,?0057\r
- 00004DEE 1155 ?0059:\r
- 00004DEE 21 10 00 1156 LD HL,16\r
- 00004DF1 19 1157 ADD HL,DE\r
- 00004DF2 4E 1158 LD C,(HL)\r
- 00004DF3 06 00 1159 LD B,0\r
- 00004DF5 DD 6E 04 1160 LD L,(IX+4)\r
- 00004DF8 DD 66 05 1161 LD H,(IX+5)\r
- 00004DFB A7 1162 AND A\r
- 00004DFC ED 42 1163 SBC HL,BC\r
- 00004DFE 20 03 1164 JR NZ,?0061\r
- 00004E00 1165 ?0060:\r
- 00004E00 EB 1166 EX DE,HL\r
- 00004E01 18 08 1167 JR ?0062\r
- 00004E03 1168 ?0061:\r
- 00004E03 21 13 00 1169 LD HL,19\r
- 00004E06 19 1170 ADD HL,DE\r
- 00004E07 18 DC 1171 JR ?0336\r
- 00004E09 1172 ?0057:\r
- 00004E09 6F 1173 LD L,A\r
- 00004E0A 67 1174 LD H,A\r
- 00004E0B 1175 ?0062:\r
- 00004E0B C3 A3 81 1176 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004E0E 1177 Component_delete:\r
- 00004E0E CD 7A 82 1178 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00004E11 F8 FF 1179 DEFW 65528\r
- 00004E13 FD E5 1180 PUSH IY\r
- 00004E15 DD 6E 02 1181 LD L,(IX+2)\r
- 00004E18 DD 66 03 1182 LD H,(IX+3)\r
- 00004E1B E5 1183 PUSH HL\r
- 00004E1C FD E1 1184 POP IY\r
- 00004E1E FD 6E 15 1185 LD L,(IY+21)\r
- 00004E21 DD 75 F8 1186 LD (IX-8),L\r
- 00004E24 FD 66 16 1187 LD H,(IY+22)\r
- 00004E27 DD 74 F9 1188 LD (IX-7),H\r
- 00004E2A FD E5 1189 PUSH IY\r
- 00004E2C E1 1190 POP HL\r
- 00004E2D 7D 1191 LD A,L\r
- 00004E2E B4 1192 OR H\r
- 00004E2F CA C1 4F 1193 JP Z,?0064\r
- 00004E32 1194 ?0063:\r
- 00004E32 1195 ?0066:\r
- 00004E32 DD 7E F8 1196 LD A,(IX-8)\r
- 00004E35 DD B6 F9 1197 OR (IX-7)\r
- 00004E38 28 11 1198 JR Z,?0065\r
- 00004E3A 1199 ?0067:\r
- 00004E3A DD 5E F8 1200 LD E,(IX-8)\r
- 00004E3D DD 56 F9 1201 LD D,(IX-7)\r
- 00004E40 CD D7 4F 1202 CALL LWRD ?0453\r
- 00004E43 DD 75 F8 1203 LD (IX-8),L\r
- 00004E46 DD 74 F9 1204 LD (IX-7),H\r
- 00004E49 18 E7 1205 JR ?0063\r
- 00004E4B 1206 ?0065:\r
- 00004E4B FD 7E 11 1207 LD A,(IY+17)\r
- 00004E4E FD B6 12 1208 OR (IY+18)\r
- 00004E51 CA DD 4E 1209 JP Z,?0079\r
- 00004E54 1210 ?0068:\r
- 00004E54 FD 6E 11 1211 LD L,(IY+17)\r
- 00004E57 FD 66 12 1212 LD H,(IY+18)\r
- 00004E5A 01 15 00 1213 LD BC,21\r
- 00004E5D 09 1214 ADD HL,BC\r
- 00004E5E 46 1215 LD B,(HL)\r
- 00004E5F 23 1216 INC HL\r
- 00004E60 66 1217 LD H,(HL)\r
- 00004E61 68 1218 LD L,B\r
- 00004E62 FD E5 1219 PUSH IY\r
- 00004E64 C1 1220 POP BC\r
- 00004E65 A7 1221 AND A\r
- 00004E66 ED 42 1222 SBC HL,BC\r
- 00004E68 FD 6E 11 1223 LD L,(IY+17)\r
- 00004E6B FD 66 12 1224 LD H,(IY+18)\r
- 00004E6E 01 15 00 1225 LD BC,21\r
- 00004E71 09 1226 ADD HL,BC\r
- 00004E72 20 09 1227 JR NZ,?0071\r
- 00004E74 1228 ?0070:\r
- 00004E74 E5 1229 PUSH HL\r
- 00004E75 FD 6E 11 1230 LD L,(IY+17)\r
- 00004E78 FD 66 12 1231 LD H,(IY+18)\r
- 00004E7B 18 50 1232 JR ?0339\r
- 00004E7D 1233 ?0071:\r
- 00004E7D 46 1234 LD B,(HL)\r
- 00004E7E 23 1235 INC HL\r
- 00004E7F 66 1236 LD H,(HL)\r
- 00004E80 68 1237 LD L,B\r
- 00004E81 1238 ?0338:\r
- 00004E81 DD 75 F8 1239 LD (IX-8),L\r
- 00004E84 DD 74 F9 1240 LD (IX-7),H\r
- 00004E87 1241 ?0074:\r
- 00004E87 21 13 00 1242 LD HL,19\r
- 00004E8A DD 4E F8 1243 LD C,(IX-8)\r
- 00004E8D DD 46 F9 1244 LD B,(IX-7)\r
- 00004E90 09 1245 ADD HL,BC\r
- 00004E91 46 1246 LD B,(HL)\r
- 00004E92 23 1247 INC HL\r
- 00004E93 66 1248 LD H,(HL)\r
- 00004E94 68 1249 LD L,B\r
- 00004E95 FD E5 1250 PUSH IY\r
- 00004E97 C1 1251 POP BC\r
- 00004E98 A7 1252 AND A\r
- 00004E99 ED 42 1253 SBC HL,BC\r
- 00004E9B 28 19 1254 JR Z,?0073\r
- 00004E9D 21 13 00 1255 LD HL,19\r
- 00004EA0 DD 4E F8 1256 LD C,(IX-8)\r
- 00004EA3 DD 46 F9 1257 LD B,(IX-7)\r
- 00004EA6 09 1258 ADD HL,BC\r
- 00004EA7 7E 1259 LD A,(HL)\r
- 00004EA8 23 1260 INC HL\r
- 00004EA9 B6 1261 OR (HL)\r
- 00004EAA 28 0A 1262 JR Z,?0073\r
- 00004EAC 1263 ?0077:\r
- 00004EAC 1264 ?0076:\r
- 00004EAC 1265 ?0075:\r
- 00004EAC 21 13 00 1266 LD HL,19\r
- 00004EAF 09 1267 ADD HL,BC\r
- 00004EB0 56 1268 LD D,(HL)\r
- 00004EB1 23 1269 INC HL\r
- 00004EB2 66 1270 LD H,(HL)\r
- 00004EB3 6A 1271 LD L,D\r
- 00004EB4 18 CB 1272 JR ?0338\r
- 00004EB6 1273 ?0073:\r
- 00004EB6 21 13 00 1274 LD HL,19\r
- 00004EB9 DD 4E F8 1275 LD C,(IX-8)\r
- 00004EBC DD 46 F9 1276 LD B,(IX-7)\r
- 00004EBF 09 1277 ADD HL,BC\r
- 00004EC0 7E 1278 LD A,(HL)\r
- 00004EC1 23 1279 INC HL\r
- 00004EC2 B6 1280 OR (HL)\r
- 00004EC3 28 18 1281 JR Z,?0079\r
- 00004EC5 1282 ?0078:\r
- 00004EC5 21 13 00 1283 LD HL,19\r
- 00004EC8 09 1284 ADD HL,BC\r
- 00004EC9 E5 1285 PUSH HL\r
- 00004ECA 21 13 00 1286 LD HL,19\r
- 00004ECD 1287 ?0339:\r
- 00004ECD 09 1288 ADD HL,BC\r
- 00004ECE 46 1289 LD B,(HL)\r
- 00004ECF 23 1290 INC HL\r
- 00004ED0 66 1291 LD H,(HL)\r
- 00004ED1 68 1292 LD L,B\r
- 00004ED2 01 13 00 1293 LD BC,19\r
- 00004ED5 09 1294 ADD HL,BC\r
- 00004ED6 4E 1295 LD C,(HL)\r
- 00004ED7 23 1296 INC HL\r
- 00004ED8 46 1297 LD B,(HL)\r
- 00004ED9 E1 1298 POP HL\r
- 00004EDA 71 1299 LD (HL),C\r
- 00004EDB 23 1300 INC HL\r
- 00004EDC 70 1301 LD (HL),B\r
- 00004EDD 1302 ?0079:\r
- 00004EDD 1303 ?0072:\r
- 00004EDD 1304 ?0069:\r
- 00004EDD FD 6E 13 1305 LD L,(IY+19)\r
- 00004EE0 DD 75 F8 1306 LD (IX-8),L\r
- 00004EE3 FD 66 14 1307 LD H,(IY+20)\r
- 00004EE6 DD 74 F9 1308 LD (IX-7),H\r
- 00004EE9 3E 04 1309 LD A,4\r
- 00004EEB FD AE 24 1310 XOR (IY+36)\r
- 00004EEE FD B6 25 1311 OR (IY+37)\r
- 00004EF1 C2 8D 4F 1312 JP NZ,?0088\r
- 00004EF4 1313 ?0080:\r
- 00004EF4 FD 6E 11 1314 LD L,(IY+17)\r
- 00004EF7 DD 75 FC 1315 LD (IX-4),L\r
- 00004EFA FD 66 12 1316 LD H,(IY+18)\r
- 00004EFD DD 74 FD 1317 LD (IX-3),H\r
- 00004F00 FD 6E 26 1318 LD L,(IY+38)\r
- 00004F03 DD 75 FE 1319 LD (IX-2),L\r
- 00004F06 FD 66 27 1320 LD H,(IY+39)\r
- 00004F09 DD 74 FF 1321 LD (IX-1),H\r
- 00004F0C CD CC 4F 1322 CALL LWRD ?0451\r
- 00004F0F DD 6E FE 1323 LD L,(IX-2)\r
- 00004F12 DD 66 FF 1324 LD H,(IX-1)\r
- 00004F15 23 1325 INC HL\r
- 00004F16 23 1326 INC HL\r
- 00004F17 CD CC 4F 1327 CALL LWRD ?0451\r
- 00004F1A 1328 ?0083:\r
- 00004F1A DD 7E FC 1329 LD A,(IX-4)\r
- 00004F1D DD B6 FD 1330 OR (IX-3)\r
- 00004F20 28 20 1331 JR Z,?0082\r
- 00004F22 21 24 00 1332 LD HL,36\r
- 00004F25 DD 4E FC 1333 LD C,(IX-4)\r
- 00004F28 DD 46 FD 1334 LD B,(IX-3)\r
- 00004F2B 09 1335 ADD HL,BC\r
- 00004F2C 3E 04 1336 LD A,4\r
- 00004F2E AE 1337 XOR (HL)\r
- 00004F2F 23 1338 INC HL\r
- 00004F30 B6 1339 OR (HL)\r
- 00004F31 28 0F 1340 JR Z,?0082\r
- 00004F33 1341 ?0086:\r
- 00004F33 1342 ?0085:\r
- 00004F33 1343 ?0084:\r
- 00004F33 21 11 00 1344 LD HL,17\r
- 00004F36 09 1345 ADD HL,BC\r
- 00004F37 56 1346 LD D,(HL)\r
- 00004F38 DD 72 FC 1347 LD (IX-4),D\r
- 00004F3B 23 1348 INC HL\r
- 00004F3C 66 1349 LD H,(HL)\r
- 00004F3D DD 74 FD 1350 LD (IX-3),H\r
- 00004F40 18 D8 1351 JR ?0083\r
- 00004F42 1352 ?0082:\r
- 00004F42 DD 7E FC 1353 LD A,(IX-4)\r
- 00004F45 DD B6 FD 1354 OR (IX-3)\r
- 00004F48 28 43 1355 JR Z,?0088\r
- 00004F4A 1356 ?0087:\r
- 00004F4A 21 26 00 1357 LD HL,38\r
- 00004F4D DD 4E FC 1358 LD C,(IX-4)\r
- 00004F50 DD 46 FD 1359 LD B,(IX-3)\r
- 00004F53 09 1360 ADD HL,BC\r
- 00004F54 46 1361 LD B,(HL)\r
- 00004F55 DD 70 FE 1362 LD (IX-2),B\r
- 00004F58 23 1363 INC HL\r
- 00004F59 66 1364 LD H,(HL)\r
- 00004F5A DD 74 FF 1365 LD (IX-1),H\r
- 00004F5D 21 06 00 1366 LD HL,6\r
- 00004F60 ED 4B 3F 87 1367 LD BC,(global)\r
- 00004F64 09 1368 ADD HL,BC\r
- 00004F65 E5 1369 PUSH HL\r
- 00004F66 DD 6E FE 1370 LD L,(IX-2)\r
- 00004F69 DD 66 FF 1371 LD H,(IX-1)\r
- 00004F6C 5E 1372 LD E,(HL)\r
- 00004F6D 23 1373 INC HL\r
- 00004F6E 56 1374 LD D,(HL)\r
- 00004F6F E1 1375 POP HL\r
- 00004F70 73 1376 LD (HL),E\r
- 00004F71 23 1377 INC HL\r
- 00004F72 72 1378 LD (HL),D\r
- 00004F73 21 08 00 1379 LD HL,8\r
- 00004F76 ED 4B 3F 87 1380 LD BC,(global)\r
- 00004F7A 09 1381 ADD HL,BC\r
- 00004F7B E5 1382 PUSH HL\r
- 00004F7C DD 4E FE 1383 LD C,(IX-2)\r
- 00004F7F DD 46 FF 1384 LD B,(IX-1)\r
- 00004F82 03 1385 INC BC\r
- 00004F83 03 1386 INC BC\r
- 00004F84 69 1387 LD L,C\r
- 00004F85 60 1388 LD H,B\r
- 00004F86 4E 1389 LD C,(HL)\r
- 00004F87 23 1390 INC HL\r
- 00004F88 46 1391 LD B,(HL)\r
- 00004F89 E1 1392 POP HL\r
- 00004F8A 71 1393 LD (HL),C\r
- 00004F8B 23 1394 INC HL\r
- 00004F8C 70 1395 LD (HL),B\r
- 00004F8D 1396 ?0088:\r
- 00004F8D 1397 ?0081:\r
- 00004F8D FD 4E 24 1398 LD C,(IY+36)\r
- 00004F90 FD 46 25 1399 LD B,(IY+37)\r
- 00004F93 21 00 00 1400 LD HL,0\r
- 00004F96 CD C8 82 1401 CALL LWRD ?SS_CMP_L02\r
- 00004F99 30 09 1402 JR NC,?0090\r
- 00004F9B 1403 ?0089:\r
- 00004F9B FD 5E 26 1404 LD E,(IY+38)\r
- 00004F9E FD 56 27 1405 LD D,(IY+39)\r
- 00004FA1 CD CF 4F 1406 CALL LWRD ?0452\r
- 00004FA4 1407 ?0090:\r
- 00004FA4 FD CB 0B 76 1408 BIT 6,(IY+11)\r
- 00004FA8 20 11 1409 JR NZ,?0092\r
- 00004FAA FD 7E 20 1410 LD A,(IY+32)\r
- 00004FAD FD B6 21 1411 OR (IY+33)\r
- 00004FB0 28 09 1412 JR Z,?0092\r
- 00004FB2 1413 ?0094:\r
- 00004FB2 1414 ?0093:\r
- 00004FB2 1415 ?0091:\r
- 00004FB2 FD 5E 20 1416 LD E,(IY+32)\r
- 00004FB5 FD 56 21 1417 LD D,(IY+33)\r
- 00004FB8 CD CF 4F 1418 CALL LWRD ?0452\r
- 00004FBB 1419 ?0092:\r
- 00004FBB FD E5 1420 PUSH IY\r
- 00004FBD D1 1421 POP DE\r
- 00004FBE CD CF 4F 1422 CALL LWRD ?0452\r
- 00004FC1 1423 ?0064:\r
- 00004FC1 DD 6E F8 1424 LD L,(IX-8)\r
- 00004FC4 DD 66 F9 1425 LD H,(IX-7)\r
- 00004FC7 FD E1 1426 POP IY\r
- 00004FC9 C3 A3 81 1427 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00004FCC 1428 ?0451:\r
- 00004FCC 5E 1429 LD E,(HL)\r
- 00004FCD 23 1430 INC HL\r
- 00004FCE 56 1431 LD D,(HL)\r
- 00004FCF 1432 ?0452:\r
- 00004FCF 3E 00 1433 LD A,BYTE3 free\r
- 00004FD1 21 5F 74 1434 LD HL,LWRD free\r
- 00004FD4 C3 FB 81 1435 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00004FD7 1436 ?0453:\r
- 00004FD7 3E 00 1437 LD A,BYTE3 Component_delete\r
- 00004FD9 21 0E 4E 1438 LD HL,LWRD Component_delete\r
- 00004FDC C3 FB 81 1439 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00004FDF 1440 Component_delete_children:\r
- 00004FDF C5 1441 PUSH BC\r
- 00004FE0 FD E5 1442 PUSH IY\r
- 00004FE2 DD E5 1443 PUSH IX\r
- 00004FE4 21 15 00 1444 LD HL,21\r
- 00004FE7 19 1445 ADD HL,DE\r
- 00004FE8 46 1446 LD B,(HL)\r
- 00004FE9 23 1447 INC HL\r
- 00004FEA 66 1448 LD H,(HL)\r
- 00004FEB 68 1449 LD L,B\r
- 00004FEC 1450 ?0341:\r
- 00004FEC E5 1451 PUSH HL\r
- 00004FED DD E1 1452 POP IX\r
- 00004FEF 1453 ?0096:\r
- 00004FEF 7D 1454 LD A,L\r
- 00004FF0 B4 1455 OR H\r
- 00004FF1 28 08 1456 JR Z,?0095\r
- 00004FF3 1457 ?0097:\r
- 00004FF3 DD E5 1458 PUSH IX\r
- 00004FF5 D1 1459 POP DE\r
- 00004FF6 CD D7 4F 1460 CALL LWRD ?0453\r
- 00004FF9 18 F1 1461 JR ?0341\r
- 00004FFB 1462 ?0095:\r
- 00004FFB C3 A6 48 1463 JP LWRD ?0411\r
- 00004FFE 1464 Component_changestate_children:\r
- 00004FFE CD 7A 82 1465 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005001 00 00 1466 DEFW 0\r
- 00005003 FD E5 1467 PUSH IY\r
- 00005005 21 15 00 1468 LD HL,21\r
- 00005008 DD 5E 02 1469 LD E,(IX+2)\r
- 0000500B DD 56 03 1470 LD D,(IX+3)\r
- 0000500E 19 1471 ADD HL,DE\r
- 0000500F 1472 ?0342:\r
- 0000500F 56 1473 LD D,(HL)\r
- 00005010 23 1474 INC HL\r
- 00005011 66 1475 LD H,(HL)\r
- 00005012 6A 1476 LD L,D\r
- 00005013 E5 1477 PUSH HL\r
- 00005014 FD E1 1478 POP IY\r
- 00005016 1479 ?0099:\r
- 00005016 7D 1480 LD A,L\r
- 00005017 B4 1481 OR H\r
- 00005018 28 3D 1482 JR Z,?0098\r
- 0000501A 1483 ?0100:\r
- 0000501A 21 0A 00 1484 LD HL,10\r
- 0000501D FD E5 1485 PUSH IY\r
- 0000501F C1 1486 POP BC\r
- 00005020 09 1487 ADD HL,BC\r
- 00005021 DD 7E 04 1488 LD A,(IX+4)\r
- 00005024 DD 56 05 1489 LD D,(IX+5)\r
- 00005027 2F 1490 CPL\r
- 00005028 5F 1491 LD E,A\r
- 00005029 7A 1492 LD A,D\r
- 0000502A 2F 1493 CPL\r
- 0000502B 57 1494 LD D,A\r
- 0000502C 7E 1495 LD A,(HL)\r
- 0000502D A3 1496 AND E\r
- 0000502E 77 1497 LD (HL),A\r
- 0000502F 23 1498 INC HL\r
- 00005030 7E 1499 LD A,(HL)\r
- 00005031 A2 1500 AND D\r
- 00005032 77 1501 LD (HL),A\r
- 00005033 21 0A 00 1502 LD HL,10\r
- 00005036 09 1503 ADD HL,BC\r
- 00005037 7E 1504 LD A,(HL)\r
- 00005038 DD B6 0A 1505 OR (IX+10)\r
- 0000503B 77 1506 LD (HL),A\r
- 0000503C 23 1507 INC HL\r
- 0000503D 7E 1508 LD A,(HL)\r
- 0000503E DD B6 0B 1509 OR (IX+11)\r
- 00005041 77 1510 LD (HL),A\r
- 00005042 21 0A 00 1511 LD HL,10\r
- 00005045 09 1512 ADD HL,BC\r
- 00005046 7E 1513 LD A,(HL)\r
- 00005047 DD AE 0C 1514 XOR (IX+12)\r
- 0000504A 77 1515 LD (HL),A\r
- 0000504B 23 1516 INC HL\r
- 0000504C 7E 1517 LD A,(HL)\r
- 0000504D DD AE 0D 1518 XOR (IX+13)\r
- 00005050 77 1519 LD (HL),A\r
- 00005051 21 13 00 1520 LD HL,19\r
- 00005054 09 1521 ADD HL,BC\r
- 00005055 18 B8 1522 JR ?0342\r
- 00005057 1523 ?0098:\r
- 00005057 11 00 86 1524 LD DE,stdout\r
- 0000505A 3E 00 1525 LD A,BYTE3 fflush\r
- 0000505C 21 5F 70 1526 LD HL,LWRD fflush\r
- 0000505F CD FB 81 1527 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005062 FD E1 1528 POP IY\r
- 00005064 C3 A3 81 1529 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00005067 1530 Component_linkstringtable:\r
- 00005067 C5 1531 PUSH BC\r
- 00005068 FD E5 1532 PUSH IY\r
- 0000506A DD E5 1533 PUSH IX\r
- 0000506C D5 1534 PUSH DE\r
- 0000506D DD E1 1535 POP IX\r
- 0000506F 21 15 00 1536 LD HL,21\r
- 00005072 19 1537 ADD HL,DE\r
- 00005073 46 1538 LD B,(HL)\r
- 00005074 23 1539 INC HL\r
- 00005075 66 1540 LD H,(HL)\r
- 00005076 68 1541 LD L,B\r
- 00005077 E5 1542 PUSH HL\r
- 00005078 FD E1 1543 POP IY\r
- 0000507A 21 20 00 1544 LD HL,32\r
- 0000507D 19 1545 ADD HL,DE\r
- 0000507E 46 1546 LD B,(HL)\r
- 0000507F 23 1547 INC HL\r
- 00005080 66 1548 LD H,(HL)\r
- 00005081 68 1549 LD L,B\r
- 00005082 01 00 90 1550 LD BC,36864\r
- 00005085 3E 80 1551 LD A,128\r
- 00005087 AC 1552 XOR H\r
- 00005088 67 1553 LD H,A\r
- 00005089 ED 42 1554 SBC HL,BC\r
- 0000508B 30 2E 1555 JR NC,?0102\r
- 0000508D DD 4E 20 1556 LD C,(IX+32)\r
- 00005090 DD 46 21 1557 LD B,(IX+33)\r
- 00005093 21 00 00 1558 LD HL,0\r
- 00005096 CD C8 82 1559 CALL LWRD ?SS_CMP_L02\r
- 00005099 30 20 1560 JR NC,?0102\r
- 0000509B 1561 ?0104:\r
- 0000509B 1562 ?0103:\r
- 0000509B 1563 ?0101:\r
- 0000509B DD 6E 20 1564 LD L,(IX+32)\r
- 0000509E DD 66 21 1565 LD H,(IX+33)\r
- 000050A1 29 1566 ADD HL,HL\r
- 000050A2 E5 1567 PUSH HL\r
- 000050A3 21 08 00 1568 LD HL,8\r
- 000050A6 ED 4B 3F 87 1569 LD BC,(global)\r
- 000050AA 09 1570 ADD HL,BC\r
- 000050AB 4E 1571 LD C,(HL)\r
- 000050AC 23 1572 INC HL\r
- 000050AD 46 1573 LD B,(HL)\r
- 000050AE E1 1574 POP HL\r
- 000050AF 09 1575 ADD HL,BC\r
- 000050B0 2B 1576 DEC HL\r
- 000050B1 2B 1577 DEC HL\r
- 000050B2 46 1578 LD B,(HL)\r
- 000050B3 DD 70 20 1579 LD (IX+32),B\r
- 000050B6 23 1580 INC HL\r
- 000050B7 66 1581 LD H,(HL)\r
- 000050B8 DD 74 21 1582 LD (IX+33),H\r
- 000050BB 1583 ?0102:\r
- 000050BB DD 6E 22 1584 LD L,(IX+34)\r
- 000050BE DD 66 23 1585 LD H,(IX+35)\r
- 000050C1 01 00 90 1586 LD BC,36864\r
- 000050C4 3E 80 1587 LD A,128\r
- 000050C6 AC 1588 XOR H\r
- 000050C7 67 1589 LD H,A\r
- 000050C8 ED 42 1590 SBC HL,BC\r
- 000050CA 30 2E 1591 JR NC,?0106\r
- 000050CC DD 4E 22 1592 LD C,(IX+34)\r
- 000050CF DD 46 23 1593 LD B,(IX+35)\r
- 000050D2 21 00 00 1594 LD HL,0\r
- 000050D5 CD C8 82 1595 CALL LWRD ?SS_CMP_L02\r
- 000050D8 30 20 1596 JR NC,?0106\r
- 000050DA 1597 ?0108:\r
- 000050DA 1598 ?0107:\r
- 000050DA 1599 ?0105:\r
- 000050DA DD 6E 22 1600 LD L,(IX+34)\r
- 000050DD DD 66 23 1601 LD H,(IX+35)\r
- 000050E0 29 1602 ADD HL,HL\r
- 000050E1 E5 1603 PUSH HL\r
- 000050E2 21 08 00 1604 LD HL,8\r
- 000050E5 ED 4B 3F 87 1605 LD BC,(global)\r
- 000050E9 09 1606 ADD HL,BC\r
- 000050EA 4E 1607 LD C,(HL)\r
- 000050EB 23 1608 INC HL\r
- 000050EC 46 1609 LD B,(HL)\r
- 000050ED E1 1610 POP HL\r
- 000050EE 09 1611 ADD HL,BC\r
- 000050EF 2B 1612 DEC HL\r
- 000050F0 2B 1613 DEC HL\r
- 000050F1 46 1614 LD B,(HL)\r
- 000050F2 DD 70 22 1615 LD (IX+34),B\r
- 000050F5 23 1616 INC HL\r
- 000050F6 66 1617 LD H,(HL)\r
- 000050F7 DD 74 23 1618 LD (IX+35),H\r
- 000050FA 1619 ?0106:\r
- 000050FA 1620 ?0110:\r
- 000050FA FD E5 1621 PUSH IY\r
- 000050FC E1 1622 POP HL\r
- 000050FD 7D 1623 LD A,L\r
- 000050FE B4 1624 OR H\r
- 000050FF 28 16 1625 JR Z,?0109\r
- 00005101 1626 ?0111:\r
- 00005101 FD E5 1627 PUSH IY\r
- 00005103 D1 1628 POP DE\r
- 00005104 3E 00 1629 LD A,BYTE3 Component_linkstringtable\r
- 00005106 21 67 50 1630 LD HL,LWRD Component_linkstringtable\r
- 00005109 CD FB 81 1631 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000510C FD 6E 13 1632 LD L,(IY+19)\r
- 0000510F FD 66 14 1633 LD H,(IY+20)\r
- 00005112 E5 1634 PUSH HL\r
- 00005113 FD E1 1635 POP IY\r
- 00005115 18 E3 1636 JR ?0106\r
- 00005117 1637 ?0109:\r
- 00005117 C3 A6 48 1638 JP LWRD ?0411\r
- 0000511A 1639 Window_handler:\r
- 0000511A CD 7A 82 1640 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 0000511D D0 FF 1641 DEFW 65488\r
- 0000511F FD E5 1642 PUSH IY\r
- 00005121 AF 1643 XOR A\r
- 00005122 DD 77 FA 1644 LD (IX-6),A\r
- 00005125 DD 77 FB 1645 LD (IX-5),A\r
- 00005128 DD 77 FC 1646 LD (IX-4),A\r
- 0000512B DD 77 FD 1647 LD (IX-3),A\r
- 0000512E 59 1648 LD E,C\r
- 0000512F 50 1649 LD D,B\r
- 00005130 CD 1C 82 1650 CALL LWRD ?S_V_SWITCH_L06\r
- 00005133 08 00 1651 DEFW 8\r
- 00005135 01 00 1652 DEFW 1\r
- 00005137 02 00 1653 DEFW 2\r
- 00005139 03 00 1654 DEFW 3\r
- 0000513B 02 01 1655 DEFW 258\r
- 0000513D 03 01 1656 DEFW 259\r
- 0000513F 04 01 1657 DEFW 260\r
- 00005141 05 01 1658 DEFW 261\r
- 00005143 01 04 1659 DEFW 1025\r
- 00005145 B3 53 1660 DEFW ?0159\r
- 00005147 21 53 1661 DEFW ?0153\r
- 00005149 B4 52 1662 DEFW ?0144\r
- 0000514B E0 52 1663 DEFW ?0145\r
- 0000514D 28 52 1664 DEFW ?0142\r
- 0000514F 39 52 1665 DEFW ?0143\r
- 00005151 ED 51 1666 DEFW ?0131\r
- 00005153 88 51 1667 DEFW ?0119\r
- 00005155 57 51 1668 DEFW ?0113\r
- 00005157 1669 ?0113:\r
- 00005157 21 15 00 1670 LD HL,21\r
- 0000515A DD 4E 02 1671 LD C,(IX+2)\r
- 0000515D DD 46 03 1672 LD B,(IX+3)\r
- 00005160 09 1673 ADD HL,BC\r
- 00005161 46 1674 LD B,(HL)\r
- 00005162 23 1675 INC HL\r
- 00005163 66 1676 LD H,(HL)\r
- 00005164 68 1677 LD L,B\r
- 00005165 1678 ?0344:\r
- 00005165 E5 1679 PUSH HL\r
- 00005166 FD E1 1680 POP IY\r
- 00005168 1681 ?0115:\r
- 00005168 7D 1682 LD A,L\r
- 00005169 B4 1683 OR H\r
- 0000516A 28 19 1684 JR Z,?0114\r
- 0000516C 1685 ?0116:\r
- 0000516C FD CB 0A 46 1686 BIT 0,(IY+10)\r
- 00005170 28 0B 1687 JR Z,?0118\r
- 00005172 1688 ?0117:\r
- 00005172 DD 6E 0A 1689 LD L,(IX+10)\r
- 00005175 DD 66 0B 1690 LD H,(IX+11)\r
- 00005178 E5 1691 PUSH HL\r
- 00005179 CD B8 53 1692 CALL LWRD ?0462\r
- 0000517C E1 1693 POP HL\r
- 0000517D 1694 ?0118:\r
- 0000517D FD 6E 13 1695 LD L,(IY+19)\r
- 00005180 FD 66 14 1696 LD H,(IY+20)\r
- 00005183 18 E0 1697 JR ?0344\r
- 00005185 1698 ?0114:\r
- 00005185 C3 B3 53 1699 JP LWRD ?0159\r
- 00005188 1700 ?0119:\r
- 00005188 21 15 00 1701 LD HL,21\r
- 0000518B DD 4E 02 1702 LD C,(IX+2)\r
- 0000518E DD 46 03 1703 LD B,(IX+3)\r
- 00005191 09 1704 ADD HL,BC\r
- 00005192 46 1705 LD B,(HL)\r
- 00005193 23 1706 INC HL\r
- 00005194 66 1707 LD H,(HL)\r
- 00005195 68 1708 LD L,B\r
- 00005196 1709 ?0348:\r
- 00005196 E5 1710 PUSH HL\r
- 00005197 FD E1 1711 POP IY\r
- 00005199 1712 ?0121:\r
- 00005199 7D 1713 LD A,L\r
- 0000519A B4 1714 OR H\r
- 0000519B 28 4D 1715 JR Z,?0120\r
- 0000519D 1716 ?0122:\r
- 0000519D FD CB 0A 46 1717 BIT 0,(IY+10)\r
- 000051A1 28 38 1718 JR Z,?0126\r
- 000051A3 1719 ?0123:\r
- 000051A3 DD 6E 0A 1720 LD L,(IX+10)\r
- 000051A6 DD 66 0B 1721 LD H,(IX+11)\r
- 000051A9 E5 1722 PUSH HL\r
- 000051AA CD B8 53 1723 CALL LWRD ?0462\r
- 000051AD E1 1724 POP HL\r
- 000051AE DD 6E 0A 1725 LD L,(IX+10)\r
- 000051B1 DD 66 0B 1726 LD H,(IX+11)\r
- 000051B4 E5 1727 PUSH HL\r
- 000051B5 01 03 00 1728 LD BC,3\r
- 000051B8 CD BE 53 1729 CALL LWRD ?0463\r
- 000051BB E1 1730 POP HL\r
- 000051BC FD 7E 0A 1731 LD A,(IY+10)\r
- 000051BF E6 22 1732 AND 34\r
- 000051C1 6F 1733 LD L,A\r
- 000051C2 26 00 1734 LD H,0\r
- 000051C4 3E 22 1735 LD A,34\r
- 000051C6 AD 1736 XOR L\r
- 000051C7 20 12 1737 JR NZ,?0126\r
- 000051C9 FD 4E 10 1738 LD C,(IY+16)\r
- 000051CC 44 1739 LD B,H\r
- 000051CD DD 6E 0A 1740 LD L,(IX+10)\r
- 000051D0 DD 66 0B 1741 LD H,(IX+11)\r
- 000051D3 ED 42 1742 SBC HL,BC\r
- 000051D5 20 04 1743 JR NZ,?0126\r
- 000051D7 1744 ?0128:\r
- 000051D7 1745 ?0127:\r
- 000051D7 1746 ?0125:\r
- 000051D7 FD 21 00 00 1747 LD IY,0\r
- 000051DB 1748 ?0126:\r
- 000051DB 1749 ?0124:\r
- 000051DB FD E5 1750 PUSH IY\r
- 000051DD E1 1751 POP HL\r
- 000051DE 7D 1752 LD A,L\r
- 000051DF B4 1753 OR H\r
- 000051E0 28 B7 1754 JR Z,?0121\r
- 000051E2 1755 ?0129:\r
- 000051E2 FD 6E 13 1756 LD L,(IY+19)\r
- 000051E5 FD 66 14 1757 LD H,(IY+20)\r
- 000051E8 18 AC 1758 JR ?0348\r
- 000051EA 1759 ?0130:\r
- 000051EA 1760 ?0120:\r
- 000051EA C3 B3 53 1761 JP LWRD ?0159\r
- 000051ED 1762 ?0131:\r
- 000051ED DD 6E 02 1763 LD L,(IX+2)\r
- 000051F0 DD 66 03 1764 LD H,(IX+3)\r
- 000051F3 E5 1765 PUSH HL\r
- 000051F4 FD E1 1766 POP IY\r
- 000051F6 21 0A 00 1767 LD HL,10\r
- 000051F9 DD 4E 02 1768 LD C,(IX+2)\r
- 000051FC DD 46 03 1769 LD B,(IX+3)\r
- 000051FF 09 1770 ADD HL,BC\r
- 00005200 CB 46 1771 BIT 0,(HL)\r
- 00005202 28 21 1772 JR Z,?0139\r
- 00005204 1773 ?0132:\r
- 00005204 FD CB 0A 6E 1774 BIT 5,(IY+10)\r
- 00005208 28 1B 1775 JR Z,?0139\r
- 0000520A FD 4E 10 1776 LD C,(IY+16)\r
- 0000520D 47 1777 LD B,A\r
- 0000520E DD 6E 0A 1778 LD L,(IX+10)\r
- 00005211 DD 66 0B 1779 LD H,(IX+11)\r
- 00005214 A7 1780 AND A\r
- 00005215 ED 42 1781 SBC HL,BC\r
- 00005217 20 0C 1782 JR NZ,?0139\r
- 00005219 1783 ?0137:\r
- 00005219 1784 ?0136:\r
- 00005219 1785 ?0134:\r
- 00005219 FD 6E 26 1786 LD L,(IY+38)\r
- 0000521C FD 66 27 1787 LD H,(IY+39)\r
- 0000521F FD E5 1788 PUSH IY\r
- 00005221 D1 1789 POP DE\r
- 00005222 CD DD 53 1790 CALL LWRD ?0474\r
- 00005225 1791 ?0138:\r
- 00005225 1792 ?0139:\r
- 00005225 1793 ?0135:\r
- 00005225 1794 ?0133:\r
- 00005225 1795 ?0140:\r
- 00005225 1796 ?0141:\r
- 00005225 C3 B3 53 1797 JP LWRD ?0159\r
- 00005228 1798 ?0142:\r
- 00005228 DD 5E 02 1799 LD E,(IX+2)\r
- 0000522B 4B 1800 LD C,E\r
- 0000522C DD 56 03 1801 LD D,(IX+3)\r
- 0000522F 42 1802 LD B,D\r
- 00005230 21 1A 00 1803 LD HL,26\r
- 00005233 CD DC 53 1804 CALL LWRD ?0475\r
- 00005236 C3 B3 53 1805 JP LWRD ?0159\r
- 00005239 1806 ?0143:\r
- 00005239 21 0A 00 1807 LD HL,10\r
- 0000523C DD 4E 02 1808 LD C,(IX+2)\r
- 0000523F DD 46 03 1809 LD B,(IX+3)\r
- 00005242 09 1810 ADD HL,BC\r
- 00005243 7E 1811 LD A,(HL)\r
- 00005244 E6 FC 1812 AND 252\r
- 00005246 77 1813 LD (HL),A\r
- 00005247 21 2E 00 1814 LD HL,46\r
- 0000524A 39 1815 ADD HL,SP\r
- 0000524B E5 1816 PUSH HL\r
- 0000524C 2B 1817 DEC HL\r
- 0000524D 2B 1818 DEC HL\r
- 0000524E 4D 1819 LD C,L\r
- 0000524F 44 1820 LD B,H\r
- 00005250 DD 5E 02 1821 LD E,(IX+2)\r
- 00005253 DD 56 03 1822 LD D,(IX+3)\r
- 00005256 CD D4 53 1823 CALL LWRD ?0466\r
- 00005259 E1 1824 POP HL\r
- 0000525A 21 08 00 1825 LD HL,8\r
- 0000525D DD 4E 02 1826 LD C,(IX+2)\r
- 00005260 DD 46 03 1827 LD B,(IX+3)\r
- 00005263 09 1828 ADD HL,BC\r
- 00005264 5E 1829 LD E,(HL)\r
- 00005265 23 1830 INC HL\r
- 00005266 56 1831 LD D,(HL)\r
- 00005267 D5 1832 PUSH DE\r
- 00005268 21 06 00 1833 LD HL,6\r
- 0000526B 09 1834 ADD HL,BC\r
- 0000526C 5E 1835 LD E,(HL)\r
- 0000526D 23 1836 INC HL\r
- 0000526E 56 1837 LD D,(HL)\r
- 0000526F D5 1838 PUSH DE\r
- 00005270 DD 6E FC 1839 LD L,(IX-4)\r
- 00005273 DD 66 FD 1840 LD H,(IX-3)\r
- 00005276 E5 1841 PUSH HL\r
- 00005277 DD 4E FA 1842 LD C,(IX-6)\r
- 0000527A DD 46 FB 1843 LD B,(IX-5)\r
- 0000527D 11 00 00 1844 LD DE,0\r
- 00005280 CD 3A 49 1845 CALL LWRD ?0471\r
- 00005283 E1 1846 POP HL\r
- 00005284 E1 1847 POP HL\r
- 00005285 E1 1848 POP HL\r
- 00005286 21 00 00 1849 LD HL,0\r
- 00005289 E5 1850 PUSH HL\r
- 0000528A 2E 11 1851 LD L,17\r
- 0000528C DD 5E 02 1852 LD E,(IX+2)\r
- 0000528F DD 56 03 1853 LD D,(IX+3)\r
- 00005292 19 1854 ADD HL,DE\r
- 00005293 5E 1855 LD E,(HL)\r
- 00005294 23 1856 INC HL\r
- 00005295 56 1857 LD D,(HL)\r
- 00005296 21 11 00 1858 LD HL,17\r
- 00005299 DD 4E 02 1859 LD C,(IX+2)\r
- 0000529C DD 46 03 1860 LD B,(IX+3)\r
- 0000529F 09 1861 ADD HL,BC\r
- 000052A0 46 1862 LD B,(HL)\r
- 000052A1 23 1863 INC HL\r
- 000052A2 66 1864 LD H,(HL)\r
- 000052A3 68 1865 LD L,B\r
- 000052A4 01 17 00 1866 LD BC,23\r
- 000052A7 09 1867 ADD HL,BC\r
- 000052A8 4E 1868 LD C,(HL)\r
- 000052A9 23 1869 INC HL\r
- 000052AA 46 1870 LD B,(HL)\r
- 000052AB 23 1871 INC HL\r
- 000052AC 7E 1872 LD A,(HL)\r
- 000052AD 69 1873 LD L,C\r
- 000052AE 60 1874 LD H,B\r
- 000052AF 01 03 01 1875 LD BC,259\r
- 000052B2 18 29 1876 JR ?0347\r
- 000052B4 1877 ?0144:\r
- 000052B4 21 11 00 1878 LD HL,17\r
- 000052B7 DD 4E 02 1879 LD C,(IX+2)\r
- 000052BA DD 46 03 1880 LD B,(IX+3)\r
- 000052BD 09 1881 ADD HL,BC\r
- 000052BE 56 1882 LD D,(HL)\r
- 000052BF 23 1883 INC HL\r
- 000052C0 66 1884 LD H,(HL)\r
- 000052C1 6A 1885 LD L,D\r
- 000052C2 E5 1886 PUSH HL\r
- 000052C3 FD E1 1887 POP IY\r
- 000052C5 59 1888 LD E,C\r
- 000052C6 50 1889 LD D,B\r
- 000052C7 CD D7 4F 1890 CALL LWRD ?0453\r
- 000052CA 21 00 00 1891 LD HL,0\r
- 000052CD E5 1892 PUSH HL\r
- 000052CE 01 03 01 1893 LD BC,259\r
- 000052D1 FD E5 1894 PUSH IY\r
- 000052D3 D1 1895 POP DE\r
- 000052D4 FD 7E 19 1896 LD A,(IY+25)\r
- 000052D7 FD 6E 17 1897 LD L,(IY+23)\r
- 000052DA FD 66 18 1898 LD H,(IY+24)\r
- 000052DD 1899 ?0347:\r
- 000052DD C3 AF 53 1900 JP LWRD ?0346\r
- 000052E0 1901 ?0145:\r
- 000052E0 21 15 00 1902 LD HL,21\r
- 000052E3 DD 4E 02 1903 LD C,(IX+2)\r
- 000052E6 DD 46 03 1904 LD B,(IX+3)\r
- 000052E9 09 1905 ADD HL,BC\r
- 000052EA 46 1906 LD B,(HL)\r
- 000052EB 23 1907 INC HL\r
- 000052EC 66 1908 LD H,(HL)\r
- 000052ED 68 1909 LD L,B\r
- 000052EE 1910 ?0345:\r
- 000052EE E5 1911 PUSH HL\r
- 000052EF FD E1 1912 POP IY\r
- 000052F1 1913 ?0147:\r
- 000052F1 7D 1914 LD A,L\r
- 000052F2 B4 1915 OR H\r
- 000052F3 28 29 1916 JR Z,?0146\r
- 000052F5 1917 ?0148:\r
- 000052F5 DD 6E 0A 1918 LD L,(IX+10)\r
- 000052F8 DD 66 0B 1919 LD H,(IX+11)\r
- 000052FB FD E5 1920 PUSH IY\r
- 000052FD C1 1921 POP BC\r
- 000052FE ED 42 1922 SBC HL,BC\r
- 00005300 28 14 1923 JR Z,?0150\r
- 00005302 FD CB 0A 5E 1924 BIT 3,(IY+10)\r
- 00005306 28 0E 1925 JR Z,?0150\r
- 00005308 1926 ?0152:\r
- 00005308 1927 ?0151:\r
- 00005308 1928 ?0149:\r
- 00005308 DD 6E 0A 1929 LD L,(IX+10)\r
- 0000530B DD 66 0B 1930 LD H,(IX+11)\r
- 0000530E E5 1931 PUSH HL\r
- 0000530F 01 03 02 1932 LD BC,515\r
- 00005312 CD BE 53 1933 CALL LWRD ?0463\r
- 00005315 E1 1934 POP HL\r
- 00005316 1935 ?0150:\r
- 00005316 FD 6E 13 1936 LD L,(IY+19)\r
- 00005319 FD 66 14 1937 LD H,(IY+20)\r
- 0000531C 18 D0 1938 JR ?0345\r
- 0000531E 1939 ?0146:\r
- 0000531E C3 B3 53 1940 JP LWRD ?0159\r
- 00005321 1941 ?0153:\r
- 00005321 21 11 00 1942 LD HL,17\r
- 00005324 DD 4E 02 1943 LD C,(IX+2)\r
- 00005327 DD 46 03 1944 LD B,(IX+3)\r
- 0000532A 09 1945 ADD HL,BC\r
- 0000532B 7E 1946 LD A,(HL)\r
- 0000532C 23 1947 INC HL\r
- 0000532D B6 1948 OR (HL)\r
- 0000532E 20 0E 1949 JR NZ,?0155\r
- 00005330 1950 ?0154:\r
- 00005330 21 04 00 1951 LD HL,4\r
- 00005333 ED 4B 3F 87 1952 LD BC,(global)\r
- 00005337 09 1953 ADD HL,BC\r
- 00005338 36 01 1954 LD (HL),1\r
- 0000533A 23 1955 INC HL\r
- 0000533B 77 1956 LD (HL),A\r
- 0000533C 18 75 1957 JR ?0159\r
- 0000533E 1958 ?0155:\r
- 0000533E 21 0A 00 1959 LD HL,10\r
- 00005341 09 1960 ADD HL,BC\r
- 00005342 23 1961 INC HL\r
- 00005343 CB 6E 1962 BIT 5,(HL)\r
- 00005345 20 28 1963 JR NZ,?0158\r
- 00005347 1964 ?0157:\r
- 00005347 DD 6E 0A 1965 LD L,(IX+10)\r
- 0000534A DD 66 0B 1966 LD H,(IX+11)\r
- 0000534D E5 1967 PUSH HL\r
- 0000534E 21 11 00 1968 LD HL,17\r
- 00005351 59 1969 LD E,C\r
- 00005352 50 1970 LD D,B\r
- 00005353 19 1971 ADD HL,DE\r
- 00005354 5E 1972 LD E,(HL)\r
- 00005355 23 1973 INC HL\r
- 00005356 56 1974 LD D,(HL)\r
- 00005357 21 11 00 1975 LD HL,17\r
- 0000535A 09 1976 ADD HL,BC\r
- 0000535B 46 1977 LD B,(HL)\r
- 0000535C 23 1978 INC HL\r
- 0000535D 66 1979 LD H,(HL)\r
- 0000535E 68 1980 LD L,B\r
- 0000535F 01 17 00 1981 LD BC,23\r
- 00005362 09 1982 ADD HL,BC\r
- 00005363 4E 1983 LD C,(HL)\r
- 00005364 23 1984 INC HL\r
- 00005365 46 1985 LD B,(HL)\r
- 00005366 23 1986 INC HL\r
- 00005367 7E 1987 LD A,(HL)\r
- 00005368 69 1988 LD L,C\r
- 00005369 60 1989 LD H,B\r
- 0000536A 01 01 04 1990 LD BC,1025\r
- 0000536D 18 40 1991 JR ?0346\r
- 0000536F 1992 ?0158:\r
- 0000536F 21 11 00 1993 LD HL,17\r
- 00005372 09 1994 ADD HL,BC\r
- 00005373 56 1995 LD D,(HL)\r
- 00005374 23 1996 INC HL\r
- 00005375 66 1997 LD H,(HL)\r
- 00005376 6A 1998 LD L,D\r
- 00005377 E5 1999 PUSH HL\r
- 00005378 FD E1 2000 POP IY\r
- 0000537A 11 0A 00 2001 LD DE,10\r
- 0000537D 19 2002 ADD HL,DE\r
- 0000537E 7E 2003 LD A,(HL)\r
- 0000537F F6 03 2004 OR 3\r
- 00005381 77 2005 LD (HL),A\r
- 00005382 6A 2006 LD L,D\r
- 00005383 62 2007 LD H,D\r
- 00005384 E5 2008 PUSH HL\r
- 00005385 23 2009 INC HL\r
- 00005386 E5 2010 PUSH HL\r
- 00005387 4A 2011 LD C,D\r
- 00005388 42 2012 LD B,D\r
- 00005389 FD E5 2013 PUSH IY\r
- 0000538B D1 2014 POP DE\r
- 0000538C 3E 00 2015 LD A,BYTE3 Component_changestate_children\r
- 0000538E 21 FE 4F 2016 LD HL,LWRD Component_changestate_children\r
- 00005391 CD FB 81 2017 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005394 E1 2018 POP HL\r
- 00005395 E1 2019 POP HL\r
- 00005396 21 00 00 2020 LD HL,0\r
- 00005399 E5 2021 PUSH HL\r
- 0000539A DD 5E 02 2022 LD E,(IX+2)\r
- 0000539D 4B 2023 LD C,E\r
- 0000539E DD 56 03 2024 LD D,(IX+3)\r
- 000053A1 42 2025 LD B,D\r
- 000053A2 2E 17 2026 LD L,23\r
- 000053A4 09 2027 ADD HL,BC\r
- 000053A5 4E 2028 LD C,(HL)\r
- 000053A6 23 2029 INC HL\r
- 000053A7 46 2030 LD B,(HL)\r
- 000053A8 23 2031 INC HL\r
- 000053A9 7E 2032 LD A,(HL)\r
- 000053AA 69 2033 LD L,C\r
- 000053AB 60 2034 LD H,B\r
- 000053AC 01 05 01 2035 LD BC,261\r
- 000053AF 2036 ?0346:\r
- 000053AF CD FB 81 2037 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000053B2 E1 2038 POP HL\r
- 000053B3 2039 ?0159:\r
- 000053B3 2040 ?0156:\r
- 000053B3 2041 ?0112:\r
- 000053B3 FD E1 2042 POP IY\r
- 000053B5 C3 A3 81 2043 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000053B8 2044 ?0462:\r
- 000053B8 DD 4E 04 2045 LD C,(IX+4)\r
- 000053BB DD 46 05 2046 LD B,(IX+5)\r
- 000053BE 2047 ?0463:\r
- 000053BE FD E5 2048 PUSH IY\r
- 000053C0 D1 2049 POP DE\r
- 000053C1 FD 7E 19 2050 LD A,(IY+25)\r
- 000053C4 FD 6E 17 2051 LD L,(IY+23)\r
- 000053C7 FD 66 18 2052 LD H,(IY+24)\r
- 000053CA C3 FB 81 2053 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 000053CD 2054 ?0467:\r
- 000053CD 23 2055 INC HL\r
- 000053CE 23 2056 INC HL\r
- 000053CF 2057 ?0468:\r
- 000053CF 4D 2058 LD C,L\r
- 000053D0 44 2059 LD B,H\r
- 000053D1 DD E5 2060 PUSH IX\r
- 000053D3 D1 2061 POP DE\r
- 000053D4 2062 ?0466:\r
- 000053D4 3E 00 2063 LD A,BYTE3 Component_findXY\r
- 000053D6 21 92 4D 2064 LD HL,LWRD Component_findXY\r
- 000053D9 C3 FB 81 2065 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 000053DC 2066 ?0475:\r
- 000053DC 09 2067 ADD HL,BC\r
- 000053DD 2068 ?0474:\r
- 000053DD 4E 2069 LD C,(HL)\r
- 000053DE 23 2070 INC HL\r
- 000053DF 46 2071 LD B,(HL)\r
- 000053E0 23 2072 INC HL\r
- 000053E1 7E 2073 LD A,(HL)\r
- 000053E2 69 2074 LD L,C\r
- 000053E3 60 2075 LD H,B\r
- 000053E4 C3 FB 81 2076 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 000053E7 2077 Window_paint:\r
- 000053E7 CD 7A 82 2078 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000053EA FC FF 2079 DEFW -4\r
- 000053EC FD E5 2080 PUSH IY\r
- 000053EE DD 6E 02 2081 LD L,(IX+2)\r
- 000053F1 DD 66 03 2082 LD H,(IX+3)\r
- 000053F4 E5 2083 PUSH HL\r
- 000053F5 FD E1 2084 POP IY\r
- 000053F7 AF 2085 XOR A\r
- 000053F8 DD 77 FE 2086 LD (IX-2),A\r
- 000053FB DD 77 FF 2087 LD (IX-1),A\r
- 000053FE DD 77 FC 2088 LD (IX-4),A\r
- 00005401 DD 77 FD 2089 LD (IX-3),A\r
- 00005404 21 0A 00 2090 LD HL,10\r
- 00005407 ED 4B 3F 87 2091 LD BC,(global)\r
- 0000540B 09 2092 ADD HL,BC\r
- 0000540C 7E 2093 LD A,(HL)\r
- 0000540D 23 2094 INC HL\r
- 0000540E 66 2095 LD H,(HL)\r
- 0000540F 6F 2096 LD L,A\r
- 00005410 46 2097 LD B,(HL)\r
- 00005411 23 2098 INC HL\r
- 00005412 66 2099 LD H,(HL)\r
- 00005413 68 2100 LD L,B\r
- 00005414 FD 4E 0E 2101 LD C,(IY+14)\r
- 00005417 FD 46 0F 2102 LD B,(IY+15)\r
- 0000541A A7 2103 AND A\r
- 0000541B ED 42 2104 SBC HL,BC\r
- 0000541D 28 09 2105 JR Z,?0161\r
- 0000541F 2106 ?0160:\r
- 0000541F FD 5E 0E 2107 LD E,(IY+14)\r
- 00005422 FD 56 0F 2108 LD D,(IY+15)\r
- 00005425 CD 6C 55 2109 CALL LWRD ?0472\r
- 00005428 2110 ?0161:\r
- 00005428 FD CB 0A 46 2111 BIT 0,(IY+10)\r
- 0000542C CA 24 55 2112 JP Z,?0163\r
- 0000542F 2113 ?0162:\r
- 0000542F 21 02 00 2114 LD HL,2\r
- 00005432 39 2115 ADD HL,SP\r
- 00005433 E5 2116 PUSH HL\r
- 00005434 23 2117 INC HL\r
- 00005435 23 2118 INC HL\r
- 00005436 4D 2119 LD C,L\r
- 00005437 44 2120 LD B,H\r
- 00005438 FD E5 2121 PUSH IY\r
- 0000543A D1 2122 POP DE\r
- 0000543B CD D4 53 2123 CALL LWRD ?0466\r
- 0000543E E1 2124 POP HL\r
- 0000543F CD 88 4D 2125 CALL LWRD ?0477\r
- 00005442 DD 4E FC 2126 LD C,(IX-4)\r
- 00005445 DD 46 FD 2127 LD B,(IX-3)\r
- 00005448 DD 5E FE 2128 LD E,(IX-2)\r
- 0000544B DD 56 FF 2129 LD D,(IX-1)\r
- 0000544E 3E 00 2130 LD A,BYTE3 Move\r
- 00005450 21 EB 46 2131 LD HL,LWRD Move\r
- 00005453 CD FB 81 2132 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005456 FD 4E 08 2133 LD C,(IY+8)\r
- 00005459 FD 46 09 2134 LD B,(IY+9)\r
- 0000545C FD 5E 06 2135 LD E,(IY+6)\r
- 0000545F FD 56 07 2136 LD D,(IY+7)\r
- 00005462 3E 00 2137 LD A,BYTE3 ClearRect\r
- 00005464 21 2A 47 2138 LD HL,LWRD ClearRect\r
- 00005467 CD FB 81 2139 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000546A FD 6E 08 2140 LD L,(IY+8)\r
- 0000546D FD 66 09 2141 LD H,(IY+9)\r
- 00005470 E5 2142 PUSH HL\r
- 00005471 FD 6E 06 2143 LD L,(IY+6)\r
- 00005474 FD 66 07 2144 LD H,(IY+7)\r
- 00005477 E5 2145 PUSH HL\r
- 00005478 DD 6E FC 2146 LD L,(IX-4)\r
- 0000547B DD 66 FD 2147 LD H,(IX-3)\r
- 0000547E E5 2148 PUSH HL\r
- 0000547F DD 4E FE 2149 LD C,(IX-2)\r
- 00005482 DD 46 FF 2150 LD B,(IX-1)\r
- 00005485 11 00 00 2151 LD DE,0\r
- 00005488 CD 3A 49 2152 CALL LWRD ?0471\r
- 0000548B E1 2153 POP HL\r
- 0000548C E1 2154 POP HL\r
- 0000548D E1 2155 POP HL\r
- 0000548E FD 5E 20 2156 LD E,(IY+32)\r
- 00005491 FD 56 21 2157 LD D,(IY+33)\r
- 00005494 21 0A 00 2158 LD HL,10\r
- 00005497 ED 4B 3F 87 2159 LD BC,(global)\r
- 0000549B 09 2160 ADD HL,BC\r
- 0000549C 7E 2161 LD A,(HL)\r
- 0000549D 23 2162 INC HL\r
- 0000549E 66 2163 LD H,(HL)\r
- 0000549F 6F 2164 LD L,A\r
- 000054A0 CD 29 55 2165 CALL LWRD ?0455\r
- 000054A3 DD 4E FC 2166 LD C,(IX-4)\r
- 000054A6 DD 46 FD 2167 LD B,(IX-3)\r
- 000054A9 09 2168 ADD HL,BC\r
- 000054AA 11 04 00 2169 LD DE,4\r
- 000054AD 19 2170 ADD HL,DE\r
- 000054AE 4D 2171 LD C,L\r
- 000054AF 44 2172 LD B,H\r
- 000054B0 CD 37 55 2173 CALL LWRD ?0459\r
- 000054B3 7E 2174 LD A,(HL)\r
- 000054B4 23 2175 INC HL\r
- 000054B5 66 2176 LD H,(HL)\r
- 000054B6 6F 2177 LD L,A\r
- 000054B7 01 05 00 2178 LD BC,5\r
- 000054BA 09 2179 ADD HL,BC\r
- 000054BB 4E 2180 LD C,(HL)\r
- 000054BC 23 2181 INC HL\r
- 000054BD 46 2182 LD B,(HL)\r
- 000054BE 23 2183 INC HL\r
- 000054BF 7E 2184 LD A,(HL)\r
- 000054C0 69 2185 LD L,C\r
- 000054C1 60 2186 LD H,B\r
- 000054C2 CD 5B 4A 2187 CALL LWRD ?0444\r
- 000054C5 01 FC FF 2188 LD BC,65532\r
- 000054C8 09 2189 ADD HL,BC\r
- 000054C9 4D 2190 LD C,L\r
- 000054CA 44 2191 LD B,H\r
- 000054CB FD 5E 06 2192 LD E,(IY+6)\r
- 000054CE FD 56 07 2193 LD D,(IY+7)\r
- 000054D1 3E 00 2194 LD A,BYTE3 DrawRectNC\r
- 000054D3 21 6D 47 2195 LD HL,LWRD DrawRectNC\r
- 000054D6 CD FB 81 2196 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000054D9 DD 4E FC 2197 LD C,(IX-4)\r
- 000054DC DD 46 FD 2198 LD B,(IX-3)\r
- 000054DF CD 37 55 2199 CALL LWRD ?0459\r
- 000054E2 46 2200 LD B,(HL)\r
- 000054E3 23 2201 INC HL\r
- 000054E4 66 2202 LD H,(HL)\r
- 000054E5 68 2203 LD L,B\r
- 000054E6 CD 29 55 2204 CALL LWRD ?0455\r
- 000054E9 01 05 00 2205 LD BC,5\r
- 000054EC 09 2206 ADD HL,BC\r
- 000054ED 4D 2207 LD C,L\r
- 000054EE 44 2208 LD B,H\r
- 000054EF FD 5E 06 2209 LD E,(IY+6)\r
- 000054F2 FD 56 07 2210 LD D,(IY+7)\r
- 000054F5 3E 00 2211 LD A,BYTE3 FillRect\r
- 000054F7 21 B2 47 2212 LD HL,LWRD FillRect\r
- 000054FA CD FB 81 2213 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000054FD 21 0E 00 2214 LD HL,14\r
- 00005500 DD 4E FC 2215 LD C,(IX-4)\r
- 00005503 DD 46 FD 2216 LD B,(IX-3)\r
- 00005506 09 2217 ADD HL,BC\r
- 00005507 4D 2218 LD C,L\r
- 00005508 44 2219 LD B,H\r
- 00005509 DD 5E FE 2220 LD E,(IX-2)\r
- 0000550C DD 56 FF 2221 LD D,(IX-1)\r
- 0000550F 13 2222 INC DE\r
- 00005510 13 2223 INC DE\r
- 00005511 3E 00 2224 LD A,BYTE3 Move\r
- 00005513 21 EB 46 2225 LD HL,LWRD Move\r
- 00005516 CD 54 55 2226 CALL LWRD ?0460\r
- 00005519 FD E5 2227 PUSH IY\r
- 0000551B D1 2228 POP DE\r
- 0000551C 3E 00 2229 LD A,BYTE3 Component_paint\r
- 0000551E 21 4C 4D 2230 LD HL,LWRD Component_paint\r
- 00005521 CD FB 81 2231 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005524 2232 ?0163:\r
- 00005524 FD E1 2233 POP IY\r
- 00005526 C3 A3 81 2234 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00005529 2235 ?0455:\r
- 00005529 01 05 00 2236 LD BC,5\r
- 0000552C 09 2237 ADD HL,BC\r
- 0000552D 4E 2238 LD C,(HL)\r
- 0000552E 23 2239 INC HL\r
- 0000552F 46 2240 LD B,(HL)\r
- 00005530 23 2241 INC HL\r
- 00005531 7E 2242 LD A,(HL)\r
- 00005532 69 2243 LD L,C\r
- 00005533 60 2244 LD H,B\r
- 00005534 C3 FB 81 2245 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00005537 2246 ?0459:\r
- 00005537 DD 5E FE 2247 LD E,(IX-2)\r
- 0000553A DD 56 FF 2248 LD D,(IX-1)\r
- 0000553D 3E 00 2249 LD A,BYTE3 Move\r
- 0000553F 21 EB 46 2250 LD HL,LWRD Move\r
- 00005542 CD FB 81 2251 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005545 FD 5E 20 2252 LD E,(IY+32)\r
- 00005548 FD 56 21 2253 LD D,(IY+33)\r
- 0000554B 21 0A 00 2254 LD HL,10\r
- 0000554E ED 4B 3F 87 2255 LD BC,(global)\r
- 00005552 09 2256 ADD HL,BC\r
- 00005553 C9 2257 RET\r
- 00005554 2258 ?0460:\r
- 00005554 CD FB 81 2259 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005557 FD 5E 20 2260 LD E,(IY+32)\r
- 0000555A FD 56 21 2261 LD D,(IY+33)\r
- 0000555D 3E 00 2262 LD A,BYTE3 Text\r
- 0000555F 21 81 48 2263 LD HL,LWRD Text\r
- 00005562 CD FB 81 2264 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005565 C9 2265 RET\r
- 00005566 2266 ?0473:\r
- 00005566 DD 5E 0E 2267 LD E,(IX+14)\r
- 00005569 DD 56 0F 2268 LD D,(IX+15)\r
- 0000556C 2269 ?0472:\r
- 0000556C 3E 00 2270 LD A,BYTE3 setCurrentFont\r
- 0000556E 21 ED 49 2271 LD HL,LWRD setCurrentFont\r
- 00005571 C3 FB 81 2272 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00005574 2273 Root_paint:\r
- 00005574 CD EF 81 2274 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00005577 CD 88 4D 2275 CALL LWRD ?0477\r
- 0000557A CD 1F 49 2276 CALL LWRD ?0461\r
- 0000557D CD FB 81 2277 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005580 01 80 00 2278 LD BC,128\r
- 00005583 58 2279 LD E,B\r
- 00005584 50 2280 LD D,B\r
- 00005585 3E 00 2281 LD A,BYTE3 GrayRect\r
- 00005587 21 3C 48 2282 LD HL,LWRD GrayRect\r
- 0000558A CD FB 81 2283 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000558D 21 80 00 2284 LD HL,128\r
- 00005590 E5 2285 PUSH HL\r
- 00005591 6C 2286 LD L,H\r
- 00005592 E5 2287 PUSH HL\r
- 00005593 E5 2288 PUSH HL\r
- 00005594 CD 37 49 2289 CALL LWRD ?0470\r
- 00005597 E1 2290 POP HL\r
- 00005598 E1 2291 POP HL\r
- 00005599 E1 2292 POP HL\r
- 0000559A DD 5E 02 2293 LD E,(IX+2)\r
- 0000559D DD 56 03 2294 LD D,(IX+3)\r
- 000055A0 3E 00 2295 LD A,BYTE3 Component_paint\r
- 000055A2 21 4C 4D 2296 LD HL,LWRD Component_paint\r
- 000055A5 CD FB 81 2297 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000055A8 C3 A3 81 2298 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000055AB 2299 Window_add:\r
- 000055AB CD EF 81 2300 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 000055AE 3E 00 2301 LD A,BYTE3 Component_add\r
- 000055B0 21 EE 4C 2302 LD HL,LWRD Component_add\r
- 000055B3 CD FB 81 2303 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000055B6 C3 A3 81 2304 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 000055B9 2305 Window_new:\r
- 000055B9 CD 7A 82 2306 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 000055BC 00 00 2307 DEFW 0\r
- 000055BE FD E5 2308 PUSH IY\r
- 000055C0 DD 6E 0C 2309 LD L,(IX+12)\r
- 000055C3 DD 66 0D 2310 LD H,(IX+13)\r
- 000055C6 E5 2311 PUSH HL\r
- 000055C7 DD 6E 0A 2312 LD L,(IX+10)\r
- 000055CA DD 66 0B 2313 LD H,(IX+11)\r
- 000055CD E5 2314 PUSH HL\r
- 000055CE CD FD 55 2315 CALL LWRD ?0438\r
- 000055D1 F1 2316 POP AF\r
- 000055D2 F1 2317 POP AF\r
- 000055D3 E5 2318 PUSH HL\r
- 000055D4 FD E1 2319 POP IY\r
- 000055D6 01 17 00 2320 LD BC,23\r
- 000055D9 09 2321 ADD HL,BC\r
- 000055DA 36 1A 2322 LD (HL),LOW(Window_handler)\r
- 000055DC 23 2323 INC HL\r
- 000055DD 36 51 2324 LD (HL),HIGH(Window_handler)\r
- 000055DF 23 2325 INC HL\r
- 000055E0 36 00 2326 LD (HL),BYTE3 Window_handler\r
- 000055E2 FD 36 1A E7 2327 LD (IY+26),LOW(Window_paint)\r
- 000055E6 FD 36 1B 53 2328 LD (IY+27),HIGH(Window_paint)\r
- 000055EA FD 36 1C 00 2329 LD (IY+28),BYTE3 Window_paint\r
- 000055EE FD 36 1D AB 2330 LD (IY+29),LOW(Window_add)\r
- 000055F2 FD 36 1E 55 2331 LD (IY+30),HIGH(Window_add)\r
- 000055F6 FD 36 1F 00 2332 LD (IY+31),BYTE3 Window_add\r
- 000055FA C3 99 4C 2333 JP LWRD ?0418\r
- 000055FD 2334 ?0438:\r
- 000055FD DD 5E 02 2335 LD E,(IX+2)\r
- 00005600 DD 56 03 2336 LD D,(IX+3)\r
- 00005603 3E 00 2337 LD A,BYTE3 Component_new\r
- 00005605 21 F7 4B 2338 LD HL,LWRD Component_new\r
- 00005608 C3 FB 81 2339 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 0000560B 2340 Button_handler:\r
- 0000560B CD EF 81 2341 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 0000560E FD E5 2342 PUSH IY\r
- 00005610 D5 2343 PUSH DE\r
- 00005611 FD E1 2344 POP IY\r
- 00005613 DD 6E 0A 2345 LD L,(IX+10)\r
- 00005616 DD 66 0B 2346 LD H,(IX+11)\r
- 00005619 E5 2347 PUSH HL\r
- 0000561A 3E 00 2348 LD A,BYTE3 Window_handler\r
- 0000561C 21 1A 51 2349 LD HL,LWRD Window_handler\r
- 0000561F CD FB 81 2350 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005622 E1 2351 POP HL\r
- 00005623 3E 03 2352 LD A,3\r
- 00005625 DD AE 04 2353 XOR (IX+4)\r
- 00005628 DD B6 05 2354 OR (IX+5)\r
- 0000562B 20 3E 2355 JR NZ,?0169\r
- 0000562D FD 4E 10 2356 LD C,(IY+16)\r
- 00005630 47 2357 LD B,A\r
- 00005631 DD 6E 0A 2358 LD L,(IX+10)\r
- 00005634 DD 66 0B 2359 LD H,(IX+11)\r
- 00005637 ED 42 2360 SBC HL,BC\r
- 00005639 20 30 2361 JR NZ,?0169\r
- 0000563B FD 7E 0A 2362 LD A,(IY+10)\r
- 0000563E E6 03 2363 AND 3\r
- 00005640 28 29 2364 JR Z,?0169\r
- 00005642 2365 ?0167:\r
- 00005642 2366 ?0166:\r
- 00005642 2367 ?0164:\r
- 00005642 DD 6E 0A 2368 LD L,(IX+10)\r
- 00005645 DD 66 0B 2369 LD H,(IX+11)\r
- 00005648 E5 2370 PUSH HL\r
- 00005649 FD 5E 11 2371 LD E,(IY+17)\r
- 0000564C FD 56 12 2372 LD D,(IY+18)\r
- 0000564F FD 6E 11 2373 LD L,(IY+17)\r
- 00005652 FD 66 12 2374 LD H,(IY+18)\r
- 00005655 0E 17 2375 LD C,23\r
- 00005657 CD 98 56 2376 CALL LWRD ?0464\r
- 0000565A E1 2377 POP HL\r
- 0000565B FD CB 0A 66 2378 BIT 4,(IY+10)\r
- 0000565F 28 0A 2379 JR Z,?0169\r
- 00005661 2380 ?0168:\r
- 00005661 FD 4E 10 2381 LD C,(IY+16)\r
- 00005664 06 00 2382 LD B,0\r
- 00005666 C5 2383 PUSH BC\r
- 00005667 CD A6 56 2384 CALL LWRD ?0469\r
- 0000566A E1 2385 POP HL\r
- 0000566B 2386 ?0169:\r
- 0000566B 2387 ?0165:\r
- 0000566B 21 01 02 2388 LD HL,513\r
- 0000566E DD 4E 04 2389 LD C,(IX+4)\r
- 00005671 DD 46 05 2390 LD B,(IX+5)\r
- 00005674 A7 2391 AND A\r
- 00005675 ED 42 2392 SBC HL,BC\r
- 00005677 20 0B 2393 JR NZ,?0171\r
- 00005679 2394 ?0170:\r
- 00005679 DD 6E 0A 2395 LD L,(IX+10)\r
- 0000567C DD 66 0B 2396 LD H,(IX+11)\r
- 0000567F E5 2397 PUSH HL\r
- 00005680 CD 89 56 2398 CALL LWRD ?0465\r
- 00005683 E1 2399 POP HL\r
- 00005684 2400 ?0171:\r
- 00005684 FD E1 2401 POP IY\r
- 00005686 C3 A3 81 2402 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00005689 2403 ?0465:\r
- 00005689 FD 5E 11 2404 LD E,(IY+17)\r
- 0000568C FD 56 12 2405 LD D,(IY+18)\r
- 0000568F FD 6E 11 2406 LD L,(IY+17)\r
- 00005692 FD 66 12 2407 LD H,(IY+18)\r
- 00005695 01 17 00 2408 LD BC,23\r
- 00005698 2409 ?0464:\r
- 00005698 09 2410 ADD HL,BC\r
- 00005699 4E 2411 LD C,(HL)\r
- 0000569A 23 2412 INC HL\r
- 0000569B 46 2413 LD B,(HL)\r
- 0000569C 23 2414 INC HL\r
- 0000569D 7E 2415 LD A,(HL)\r
- 0000569E 69 2416 LD L,C\r
- 0000569F 60 2417 LD H,B\r
- 000056A0 01 01 02 2418 LD BC,513\r
- 000056A3 C3 FB 81 2419 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 000056A6 2420 ?0469:\r
- 000056A6 FD 5E 11 2421 LD E,(IY+17)\r
- 000056A9 FD 56 12 2422 LD D,(IY+18)\r
- 000056AC FD 6E 11 2423 LD L,(IY+17)\r
- 000056AF FD 66 12 2424 LD H,(IY+18)\r
- 000056B2 0E 17 2425 LD C,23\r
- 000056B4 09 2426 ADD HL,BC\r
- 000056B5 4E 2427 LD C,(HL)\r
- 000056B6 23 2428 INC HL\r
- 000056B7 46 2429 LD B,(HL)\r
- 000056B8 23 2430 INC HL\r
- 000056B9 7E 2431 LD A,(HL)\r
- 000056BA 69 2432 LD L,C\r
- 000056BB 60 2433 LD H,B\r
- 000056BC 01 04 01 2434 LD BC,260\r
- 000056BF C3 FB 81 2435 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 000056C2 2436 Button_drawtext:\r
- 000056C2 CD EF 81 2437 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 000056C5 FD E5 2438 PUSH IY\r
- 000056C7 D5 2439 PUSH DE\r
- 000056C8 FD E1 2440 POP IY\r
- 000056CA 21 0A 00 2441 LD HL,10\r
- 000056CD 19 2442 ADD HL,DE\r
- 000056CE CB 76 2443 BIT 6,(HL)\r
- 000056D0 FD 5E 20 2444 LD E,(IY+32)\r
- 000056D3 FD 56 21 2445 LD D,(IY+33)\r
- 000056D6 21 0A 00 2446 LD HL,10\r
- 000056D9 ED 4B 3F 87 2447 LD BC,(global)\r
- 000056DD 09 2448 ADD HL,BC\r
- 000056DE 7E 2449 LD A,(HL)\r
- 000056DF 23 2450 INC HL\r
- 000056E0 66 2451 LD H,(HL)\r
- 000056E1 6F 2452 LD L,A\r
- 000056E2 01 05 00 2453 LD BC,5\r
- 000056E5 09 2454 ADD HL,BC\r
- 000056E6 4E 2455 LD C,(HL)\r
- 000056E7 23 2456 INC HL\r
- 000056E8 46 2457 LD B,(HL)\r
- 000056E9 23 2458 INC HL\r
- 000056EA 7E 2459 LD A,(HL)\r
- 000056EB 69 2460 LD L,C\r
- 000056EC 60 2461 LD H,B\r
- 000056ED 28 53 2462 JR Z,?0173\r
- 000056EF 2463 ?0172:\r
- 000056EF CD FB 81 2464 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000056F2 29 2465 ADD HL,HL\r
- 000056F3 4D 2466 LD C,L\r
- 000056F4 44 2467 LD B,H\r
- 000056F5 FD 6E 08 2468 LD L,(IY+8)\r
- 000056F8 FD 66 09 2469 LD H,(IY+9)\r
- 000056FB A7 2470 AND A\r
- 000056FC ED 42 2471 SBC HL,BC\r
- 000056FE CD 6F 57 2472 CALL LWRD ?0480\r
- 00005701 0E 0C 2473 LD C,12\r
- 00005703 09 2474 ADD HL,BC\r
- 00005704 E5 2475 PUSH HL\r
- 00005705 FD 5E 20 2476 LD E,(IY+32)\r
- 00005708 FD 56 21 2477 LD D,(IY+33)\r
- 0000570B 21 0A 00 2478 LD HL,10\r
- 0000570E ED 4B 3F 87 2479 LD BC,(global)\r
- 00005712 09 2480 ADD HL,BC\r
- 00005713 7E 2481 LD A,(HL)\r
- 00005714 23 2482 INC HL\r
- 00005715 66 2483 LD H,(HL)\r
- 00005716 6F 2484 LD L,A\r
- 00005717 CD 2F 4A 2485 CALL LWRD ?0442\r
- 0000571A C1 2486 POP BC\r
- 0000571B CD 54 55 2487 CALL LWRD ?0460\r
- 0000571E FD 5E 08 2488 LD E,(IY+8)\r
- 00005721 FD 56 09 2489 LD D,(IY+9)\r
- 00005724 CD 70 57 2490 CALL LWRD ?0481\r
- 00005727 0E 0A 2491 LD C,10\r
- 00005729 09 2492 ADD HL,BC\r
- 0000572A E5 2493 PUSH HL\r
- 0000572B FD 5E 22 2494 LD E,(IY+34)\r
- 0000572E FD 56 23 2495 LD D,(IY+35)\r
- 00005731 69 2496 LD L,C\r
- 00005732 60 2497 LD H,B\r
- 00005733 CD 26 4A 2498 CALL LWRD ?0443\r
- 00005736 C1 2499 POP BC\r
- 00005737 CD FB 81 2500 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000573A FD 5E 22 2501 LD E,(IY+34)\r
- 0000573D FD 56 23 2502 LD D,(IY+35)\r
- 00005740 18 20 2503 JR ?0350\r
- 00005742 2504 ?0173:\r
- 00005742 CD 5B 4A 2505 CALL LWRD ?0444\r
- 00005745 CD 6F 57 2506 CALL LWRD ?0480\r
- 00005748 0E 0D 2507 LD C,13\r
- 0000574A 09 2508 ADD HL,BC\r
- 0000574B E5 2509 PUSH HL\r
- 0000574C FD 5E 20 2510 LD E,(IY+32)\r
- 0000574F FD 56 21 2511 LD D,(IY+33)\r
- 00005752 21 0A 00 2512 LD HL,10\r
- 00005755 CD 26 4A 2513 CALL LWRD ?0443\r
- 00005758 C1 2514 POP BC\r
- 00005759 CD FB 81 2515 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000575C FD 5E 20 2516 LD E,(IY+32)\r
- 0000575F FD 56 21 2517 LD D,(IY+33)\r
- 00005762 2518 ?0350:\r
- 00005762 3E 00 2519 LD A,BYTE3 Text\r
- 00005764 21 81 48 2520 LD HL,LWRD Text\r
- 00005767 2521 ?0424:\r
- 00005767 CD FB 81 2522 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000576A 2523 ?0174:\r
- 0000576A FD E1 2524 POP IY\r
- 0000576C C3 A3 81 2525 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 0000576F 2526 ?0480:\r
- 0000576F EB 2527 EX DE,HL\r
- 00005770 2528 ?0481:\r
- 00005770 01 02 00 2529 LD BC,2\r
- 00005773 CD EB 82 2530 CALL LWRD ?SS_DIV_L02\r
- 00005776 DD 6E 0A 2531 LD L,(IX+10)\r
- 00005779 DD 66 0B 2532 LD H,(IX+11)\r
- 0000577C 19 2533 ADD HL,DE\r
- 0000577D C9 2534 RET\r
- 0000577E 2535 Button_paint:\r
- 0000577E C5 2536 PUSH BC\r
- 0000577F DD E5 2537 PUSH IX\r
- 00005781 F5 2538 PUSH AF\r
- 00005782 F5 2539 PUSH AF\r
- 00005783 D5 2540 PUSH DE\r
- 00005784 DD E1 2541 POP IX\r
- 00005786 21 02 00 2542 LD HL,2\r
- 00005789 39 2543 ADD HL,SP\r
- 0000578A AF 2544 XOR A\r
- 0000578B 77 2545 LD (HL),A\r
- 0000578C 23 2546 INC HL\r
- 0000578D 77 2547 LD (HL),A\r
- 0000578E 2B 2548 DEC HL\r
- 0000578F 2B 2549 DEC HL\r
- 00005790 2B 2550 DEC HL\r
- 00005791 77 2551 LD (HL),A\r
- 00005792 23 2552 INC HL\r
- 00005793 77 2553 LD (HL),A\r
- 00005794 21 0A 00 2554 LD HL,10\r
- 00005797 ED 4B 3F 87 2555 LD BC,(global)\r
- 0000579B 09 2556 ADD HL,BC\r
- 0000579C 7E 2557 LD A,(HL)\r
- 0000579D 23 2558 INC HL\r
- 0000579E 66 2559 LD H,(HL)\r
- 0000579F 6F 2560 LD L,A\r
- 000057A0 46 2561 LD B,(HL)\r
- 000057A1 23 2562 INC HL\r
- 000057A2 66 2563 LD H,(HL)\r
- 000057A3 68 2564 LD L,B\r
- 000057A4 E5 2565 PUSH HL\r
- 000057A5 21 0E 00 2566 LD HL,14\r
- 000057A8 19 2567 ADD HL,DE\r
- 000057A9 4E 2568 LD C,(HL)\r
- 000057AA 23 2569 INC HL\r
- 000057AB 46 2570 LD B,(HL)\r
- 000057AC E1 2571 POP HL\r
- 000057AD A7 2572 AND A\r
- 000057AE ED 42 2573 SBC HL,BC\r
- 000057B0 28 03 2574 JR Z,?0176\r
- 000057B2 2575 ?0175:\r
- 000057B2 CD 66 55 2576 CALL LWRD ?0473\r
- 000057B5 2577 ?0176:\r
- 000057B5 DD CB 0A 46 2578 BIT 0,(IX+10)\r
- 000057B9 CA 4E 58 2579 JP Z,?0178\r
- 000057BC 2580 ?0177:\r
- 000057BC 21 00 00 2581 LD HL,0\r
- 000057BF 39 2582 ADD HL,SP\r
- 000057C0 E5 2583 PUSH HL\r
- 000057C1 CD CD 53 2584 CALL LWRD ?0467\r
- 000057C4 E1 2585 POP HL\r
- 000057C5 21 00 00 2586 LD HL,0\r
- 000057C8 39 2587 ADD HL,SP\r
- 000057C9 CD 56 58 2588 CALL LWRD ?0457\r
- 000057CC CD FB 81 2589 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000057CF DD 6E 08 2590 LD L,(IX+8)\r
- 000057D2 DD 66 09 2591 LD H,(IX+9)\r
- 000057D5 E5 2592 PUSH HL\r
- 000057D6 DD 6E 06 2593 LD L,(IX+6)\r
- 000057D9 DD 66 07 2594 LD H,(IX+7)\r
- 000057DC E5 2595 PUSH HL\r
- 000057DD 21 04 00 2596 LD HL,4\r
- 000057E0 39 2597 ADD HL,SP\r
- 000057E1 4E 2598 LD C,(HL)\r
- 000057E2 23 2599 INC HL\r
- 000057E3 46 2600 LD B,(HL)\r
- 000057E4 C5 2601 PUSH BC\r
- 000057E5 23 2602 INC HL\r
- 000057E6 4E 2603 LD C,(HL)\r
- 000057E7 23 2604 INC HL\r
- 000057E8 46 2605 LD B,(HL)\r
- 000057E9 DD CB 0A 4E 2606 BIT 1,(IX+10)\r
- 000057ED 28 07 2607 JR Z,?0180\r
- 000057EF DD 5E 10 2608 LD E,(IX+16)\r
- 000057F2 16 00 2609 LD D,0\r
- 000057F4 18 03 2610 JR ?0181\r
- 000057F6 2611 ?0180:\r
- 000057F6 11 00 00 2612 LD DE,0\r
- 000057F9 2613 ?0181:\r
- 000057F9 CD 3A 49 2614 CALL LWRD ?0471\r
- 000057FC E1 2615 POP HL\r
- 000057FD E1 2616 POP HL\r
- 000057FE E1 2617 POP HL\r
- 000057FF DD 7E 0A 2618 LD A,(IX+10)\r
- 00005802 E6 82 2619 AND 130\r
- 00005804 28 1C 2620 JR Z,?0183\r
- 00005806 DD 7E 0A 2621 LD A,(IX+10)\r
- 00005809 E6 82 2622 AND 130\r
- 0000580B EE 82 2623 XOR 130\r
- 0000580D 28 13 2624 JR Z,?0183\r
- 0000580F 2625 ?0185:\r
- 0000580F 2626 ?0184:\r
- 0000580F 2627 ?0182:\r
- 0000580F DD 4E 08 2628 LD C,(IX+8)\r
- 00005812 DD 46 09 2629 LD B,(IX+9)\r
- 00005815 DD 5E 06 2630 LD E,(IX+6)\r
- 00005818 DD 56 07 2631 LD D,(IX+7)\r
- 0000581B 3E 00 2632 LD A,BYTE3 FillRectNC\r
- 0000581D 21 F7 47 2633 LD HL,LWRD FillRectNC\r
- 00005820 18 11 2634 JR ?0353\r
- 00005822 2635 ?0183:\r
- 00005822 DD 4E 08 2636 LD C,(IX+8)\r
- 00005825 DD 46 09 2637 LD B,(IX+9)\r
- 00005828 DD 5E 06 2638 LD E,(IX+6)\r
- 0000582B DD 56 07 2639 LD D,(IX+7)\r
- 0000582E 3E 00 2640 LD A,BYTE3 DrawRectNC\r
- 00005830 21 6D 47 2641 LD HL,LWRD DrawRectNC\r
- 00005833 2642 ?0353:\r
- 00005833 CD FB 81 2643 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005836 2644 ?0186:\r
- 00005836 21 00 00 2645 LD HL,0\r
- 00005839 39 2646 ADD HL,SP\r
- 0000583A 4E 2647 LD C,(HL)\r
- 0000583B 23 2648 INC HL\r
- 0000583C 46 2649 LD B,(HL)\r
- 0000583D C5 2650 PUSH BC\r
- 0000583E 23 2651 INC HL\r
- 0000583F 4E 2652 LD C,(HL)\r
- 00005840 23 2653 INC HL\r
- 00005841 46 2654 LD B,(HL)\r
- 00005842 DD E5 2655 PUSH IX\r
- 00005844 D1 2656 POP DE\r
- 00005845 3E 00 2657 LD A,BYTE3 Button_drawtext\r
- 00005847 21 C2 56 2658 LD HL,LWRD Button_drawtext\r
- 0000584A CD FB 81 2659 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000584D E1 2660 POP HL\r
- 0000584E 2661 ?0178:\r
- 0000584E E1 2662 POP HL\r
- 0000584F E1 2663 POP HL\r
- 00005850 DD E1 2664 POP IX\r
- 00005852 C1 2665 POP BC\r
- 00005853 C3 A9 81 2666 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 00005856 2667 ?0457:\r
- 00005856 4E 2668 LD C,(HL)\r
- 00005857 23 2669 INC HL\r
- 00005858 46 2670 LD B,(HL)\r
- 00005859 23 2671 INC HL\r
- 0000585A 2672 ?0458:\r
- 0000585A 5E 2673 LD E,(HL)\r
- 0000585B 23 2674 INC HL\r
- 0000585C 56 2675 LD D,(HL)\r
- 0000585D 3E 00 2676 LD A,BYTE3 Move\r
- 0000585F 21 EB 46 2677 LD HL,LWRD Move\r
- 00005862 CD FB 81 2678 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005865 DD 4E 08 2679 LD C,(IX+8)\r
- 00005868 DD 46 09 2680 LD B,(IX+9)\r
- 0000586B DD 5E 06 2681 LD E,(IX+6)\r
- 0000586E DD 56 07 2682 LD D,(IX+7)\r
- 00005871 3E 00 2683 LD A,BYTE3 ClearRect\r
- 00005873 21 2A 47 2684 LD HL,LWRD ClearRect\r
- 00005876 C9 2685 RET\r
- 00005877 2686 Button_add:\r
- 00005877 CD EF 81 2687 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 0000587A C3 A3 81 2688 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 0000587D 2689 Button_new:\r
- 0000587D CD 7A 82 2690 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005880 00 00 2691 DEFW 0\r
- 00005882 FD E5 2692 PUSH IY\r
- 00005884 DD 6E 0C 2693 LD L,(IX+12)\r
- 00005887 DD 66 0D 2694 LD H,(IX+13)\r
- 0000588A E5 2695 PUSH HL\r
- 0000588B DD 6E 0A 2696 LD L,(IX+10)\r
- 0000588E DD 66 0B 2697 LD H,(IX+11)\r
- 00005891 E5 2698 PUSH HL\r
- 00005892 CD FD 55 2699 CALL LWRD ?0438\r
- 00005895 F1 2700 POP AF\r
- 00005896 F1 2701 POP AF\r
- 00005897 E5 2702 PUSH HL\r
- 00005898 FD E1 2703 POP IY\r
- 0000589A 01 0A 00 2704 LD BC,10\r
- 0000589D 09 2705 ADD HL,BC\r
- 0000589E 7E 2706 LD A,(HL)\r
- 0000589F F6 03 2707 OR 3\r
- 000058A1 77 2708 LD (HL),A\r
- 000058A2 DD 46 0E 2709 LD B,(IX+14)\r
- 000058A5 FD 70 10 2710 LD (IY+16),B\r
- 000058A8 FD 36 17 0B 2711 LD (IY+23),LOW(Button_handler)\r
- 000058AC FD 36 18 56 2712 LD (IY+24),HIGH(Button_handler)\r
- 000058B0 FD 36 19 00 2713 LD (IY+25),BYTE3 Button_handler\r
- 000058B4 FD 36 1A 7E 2714 LD (IY+26),LOW(Button_paint)\r
- 000058B8 FD 36 1B 57 2715 LD (IY+27),HIGH(Button_paint)\r
- 000058BC FD 36 1C 00 2716 LD (IY+28),BYTE3 Button_paint\r
- 000058C0 FD 36 1D 77 2717 LD (IY+29),LOW(Button_add)\r
- 000058C4 FD 36 1E 58 2718 LD (IY+30),HIGH(Button_add)\r
- 000058C8 FD 36 1F 00 2719 LD (IY+31),BYTE3 Button_add\r
- 000058CC C3 99 4C 2720 JP LWRD ?0418\r
- 000058CF 2721 ToggleButton_handler:\r
- 000058CF CD EF 81 2722 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 000058D2 FD E5 2723 PUSH IY\r
- 000058D4 D5 2724 PUSH DE\r
- 000058D5 FD E1 2725 POP IY\r
- 000058D7 DD 6E 0A 2726 LD L,(IX+10)\r
- 000058DA DD 66 0B 2727 LD H,(IX+11)\r
- 000058DD E5 2728 PUSH HL\r
- 000058DE 3E 00 2729 LD A,BYTE3 Window_handler\r
- 000058E0 21 1A 51 2730 LD HL,LWRD Window_handler\r
- 000058E3 CD FB 81 2731 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000058E6 E1 2732 POP HL\r
- 000058E7 3E 03 2733 LD A,3\r
- 000058E9 DD AE 04 2734 XOR (IX+4)\r
- 000058EC DD B6 05 2735 OR (IX+5)\r
- 000058EF 20 5C 2736 JR NZ,?0192\r
- 000058F1 FD 4E 10 2737 LD C,(IY+16)\r
- 000058F4 47 2738 LD B,A\r
- 000058F5 DD 6E 0A 2739 LD L,(IX+10)\r
- 000058F8 DD 66 0B 2740 LD H,(IX+11)\r
- 000058FB ED 42 2741 SBC HL,BC\r
- 000058FD 20 4E 2742 JR NZ,?0192\r
- 000058FF FD 7E 0A 2743 LD A,(IY+10)\r
- 00005902 E6 03 2744 AND 3\r
- 00005904 28 47 2745 JR Z,?0192\r
- 00005906 2746 ?0190:\r
- 00005906 2747 ?0189:\r
- 00005906 2748 ?0187:\r
- 00005906 FD 7E 0A 2749 LD A,(IY+10)\r
- 00005909 EE 04 2750 XOR 4\r
- 0000590B FD 77 0A 2751 LD (IY+10),A\r
- 0000590E DD 6E 0A 2752 LD L,(IX+10)\r
- 00005911 DD 66 0B 2753 LD H,(IX+11)\r
- 00005914 E5 2754 PUSH HL\r
- 00005915 FD 5E 11 2755 LD E,(IY+17)\r
- 00005918 FD 56 12 2756 LD D,(IY+18)\r
- 0000591B FD 6E 11 2757 LD L,(IY+17)\r
- 0000591E FD 66 12 2758 LD H,(IY+18)\r
- 00005921 0E 17 2759 LD C,23\r
- 00005923 09 2760 ADD HL,BC\r
- 00005924 4E 2761 LD C,(HL)\r
- 00005925 23 2762 INC HL\r
- 00005926 46 2763 LD B,(HL)\r
- 00005927 23 2764 INC HL\r
- 00005928 7E 2765 LD A,(HL)\r
- 00005929 69 2766 LD L,C\r
- 0000592A 60 2767 LD H,B\r
- 0000592B 01 02 02 2768 LD BC,514\r
- 0000592E CD FB 81 2769 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005931 E1 2770 POP HL\r
- 00005932 21 00 00 2771 LD HL,0\r
- 00005935 E5 2772 PUSH HL\r
- 00005936 01 03 01 2773 LD BC,259\r
- 00005939 CD BE 53 2774 CALL LWRD ?0463\r
- 0000593C E1 2775 POP HL\r
- 0000593D FD CB 0A 66 2776 BIT 4,(IY+10)\r
- 00005941 28 0A 2777 JR Z,?0192\r
- 00005943 2778 ?0191:\r
- 00005943 FD 4E 10 2779 LD C,(IY+16)\r
- 00005946 06 00 2780 LD B,0\r
- 00005948 C5 2781 PUSH BC\r
- 00005949 CD A6 56 2782 CALL LWRD ?0469\r
- 0000594C E1 2783 POP HL\r
- 0000594D 2784 ?0192:\r
- 0000594D 2785 ?0188:\r
- 0000594D 21 01 02 2786 LD HL,513\r
- 00005950 DD 4E 04 2787 LD C,(IX+4)\r
- 00005953 DD 46 05 2788 LD B,(IX+5)\r
- 00005956 A7 2789 AND A\r
- 00005957 ED 42 2790 SBC HL,BC\r
- 00005959 20 0B 2791 JR NZ,?0194\r
- 0000595B 2792 ?0193:\r
- 0000595B DD 6E 0A 2793 LD L,(IX+10)\r
- 0000595E DD 66 0B 2794 LD H,(IX+11)\r
- 00005961 E5 2795 PUSH HL\r
- 00005962 CD 89 56 2796 CALL LWRD ?0465\r
- 00005965 E1 2797 POP HL\r
- 00005966 2798 ?0194:\r
- 00005966 FD E1 2799 POP IY\r
- 00005968 C3 A3 81 2800 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 0000596B 2801 ToggleButton_paint:\r
- 0000596B C5 2802 PUSH BC\r
- 0000596C DD E5 2803 PUSH IX\r
- 0000596E F5 2804 PUSH AF\r
- 0000596F F5 2805 PUSH AF\r
- 00005970 D5 2806 PUSH DE\r
- 00005971 DD E1 2807 POP IX\r
- 00005973 21 02 00 2808 LD HL,2\r
- 00005976 39 2809 ADD HL,SP\r
- 00005977 AF 2810 XOR A\r
- 00005978 77 2811 LD (HL),A\r
- 00005979 23 2812 INC HL\r
- 0000597A 77 2813 LD (HL),A\r
- 0000597B 2B 2814 DEC HL\r
- 0000597C 2B 2815 DEC HL\r
- 0000597D 2B 2816 DEC HL\r
- 0000597E 77 2817 LD (HL),A\r
- 0000597F 23 2818 INC HL\r
- 00005980 77 2819 LD (HL),A\r
- 00005981 21 0A 00 2820 LD HL,10\r
- 00005984 ED 4B 3F 87 2821 LD BC,(global)\r
- 00005988 09 2822 ADD HL,BC\r
- 00005989 7E 2823 LD A,(HL)\r
- 0000598A 23 2824 INC HL\r
- 0000598B 66 2825 LD H,(HL)\r
- 0000598C 6F 2826 LD L,A\r
- 0000598D 46 2827 LD B,(HL)\r
- 0000598E 23 2828 INC HL\r
- 0000598F 66 2829 LD H,(HL)\r
- 00005990 68 2830 LD L,B\r
- 00005991 E5 2831 PUSH HL\r
- 00005992 21 0E 00 2832 LD HL,14\r
- 00005995 19 2833 ADD HL,DE\r
- 00005996 4E 2834 LD C,(HL)\r
- 00005997 23 2835 INC HL\r
- 00005998 46 2836 LD B,(HL)\r
- 00005999 E1 2837 POP HL\r
- 0000599A A7 2838 AND A\r
- 0000599B ED 42 2839 SBC HL,BC\r
- 0000599D 28 03 2840 JR Z,?0196\r
- 0000599F 2841 ?0195:\r
- 0000599F CD 66 55 2842 CALL LWRD ?0473\r
- 000059A2 2843 ?0196:\r
- 000059A2 DD CB 0A 46 2844 BIT 0,(IX+10)\r
- 000059A6 CA 54 5A 2845 JP Z,?0198\r
- 000059A9 2846 ?0197:\r
- 000059A9 21 00 00 2847 LD HL,0\r
- 000059AC 39 2848 ADD HL,SP\r
- 000059AD E5 2849 PUSH HL\r
- 000059AE CD CD 53 2850 CALL LWRD ?0467\r
- 000059B1 E1 2851 POP HL\r
- 000059B2 21 00 00 2852 LD HL,0\r
- 000059B5 39 2853 ADD HL,SP\r
- 000059B6 CD 56 58 2854 CALL LWRD ?0457\r
- 000059B9 CD FB 81 2855 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000059BC DD CB 0A 4E 2856 BIT 1,(IX+10)\r
- 000059C0 28 36 2857 JR Z,?0200\r
- 000059C2 DD CB 0A 56 2858 BIT 2,(IX+10)\r
- 000059C6 28 30 2859 JR Z,?0200\r
- 000059C8 2860 ?0202:\r
- 000059C8 2861 ?0201:\r
- 000059C8 2862 ?0199:\r
- 000059C8 DD 4E 08 2863 LD C,(IX+8)\r
- 000059CB DD 46 09 2864 LD B,(IX+9)\r
- 000059CE DD 5E 06 2865 LD E,(IX+6)\r
- 000059D1 DD 56 07 2866 LD D,(IX+7)\r
- 000059D4 3E 00 2867 LD A,BYTE3 FillRectNC\r
- 000059D6 21 F7 47 2868 LD HL,LWRD FillRectNC\r
- 000059D9 CD FB 81 2869 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000059DC DD 6E 08 2870 LD L,(IX+8)\r
- 000059DF DD 66 09 2871 LD H,(IX+9)\r
- 000059E2 E5 2872 PUSH HL\r
- 000059E3 DD 6E 06 2873 LD L,(IX+6)\r
- 000059E6 DD 66 07 2874 LD H,(IX+7)\r
- 000059E9 E5 2875 PUSH HL\r
- 000059EA 21 04 00 2876 LD HL,4\r
- 000059ED 39 2877 ADD HL,SP\r
- 000059EE 4E 2878 LD C,(HL)\r
- 000059EF 23 2879 INC HL\r
- 000059F0 46 2880 LD B,(HL)\r
- 000059F1 C5 2881 PUSH BC\r
- 000059F2 23 2882 INC HL\r
- 000059F3 4E 2883 LD C,(HL)\r
- 000059F4 23 2884 INC HL\r
- 000059F5 46 2885 LD B,(HL)\r
- 000059F6 18 34 2886 JR ?0357\r
- 000059F8 2887 ?0200:\r
- 000059F8 DD 4E 08 2888 LD C,(IX+8)\r
- 000059FB DD 46 09 2889 LD B,(IX+9)\r
- 000059FE DD 5E 06 2890 LD E,(IX+6)\r
- 00005A01 DD 56 07 2891 LD D,(IX+7)\r
- 00005A04 3E 00 2892 LD A,BYTE3 DrawRectNC\r
- 00005A06 21 6D 47 2893 LD HL,LWRD DrawRectNC\r
- 00005A09 CD FB 81 2894 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005A0C DD 6E 08 2895 LD L,(IX+8)\r
- 00005A0F DD 66 09 2896 LD H,(IX+9)\r
- 00005A12 E5 2897 PUSH HL\r
- 00005A13 DD 6E 06 2898 LD L,(IX+6)\r
- 00005A16 DD 66 07 2899 LD H,(IX+7)\r
- 00005A19 E5 2900 PUSH HL\r
- 00005A1A 21 04 00 2901 LD HL,4\r
- 00005A1D 39 2902 ADD HL,SP\r
- 00005A1E 4E 2903 LD C,(HL)\r
- 00005A1F 23 2904 INC HL\r
- 00005A20 46 2905 LD B,(HL)\r
- 00005A21 C5 2906 PUSH BC\r
- 00005A22 23 2907 INC HL\r
- 00005A23 4E 2908 LD C,(HL)\r
- 00005A24 23 2909 INC HL\r
- 00005A25 46 2910 LD B,(HL)\r
- 00005A26 DD CB 0A 4E 2911 BIT 1,(IX+10)\r
- 00005A2A 28 07 2912 JR Z,?0205\r
- 00005A2C 2913 ?0357:\r
- 00005A2C DD 5E 10 2914 LD E,(IX+16)\r
- 00005A2F 16 00 2915 LD D,0\r
- 00005A31 18 03 2916 JR ?0206\r
- 00005A33 2917 ?0205:\r
- 00005A33 11 00 00 2918 LD DE,0\r
- 00005A36 2919 ?0206:\r
- 00005A36 CD 3A 49 2920 CALL LWRD ?0471\r
- 00005A39 E1 2921 POP HL\r
- 00005A3A E1 2922 POP HL\r
- 00005A3B E1 2923 POP HL\r
- 00005A3C 2924 ?0203:\r
- 00005A3C 21 00 00 2925 LD HL,0\r
- 00005A3F 39 2926 ADD HL,SP\r
- 00005A40 4E 2927 LD C,(HL)\r
- 00005A41 23 2928 INC HL\r
- 00005A42 46 2929 LD B,(HL)\r
- 00005A43 C5 2930 PUSH BC\r
- 00005A44 23 2931 INC HL\r
- 00005A45 4E 2932 LD C,(HL)\r
- 00005A46 23 2933 INC HL\r
- 00005A47 46 2934 LD B,(HL)\r
- 00005A48 DD E5 2935 PUSH IX\r
- 00005A4A D1 2936 POP DE\r
- 00005A4B 3E 00 2937 LD A,BYTE3 Button_drawtext\r
- 00005A4D 21 C2 56 2938 LD HL,LWRD Button_drawtext\r
- 00005A50 CD FB 81 2939 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005A53 E1 2940 POP HL\r
- 00005A54 2941 ?0198:\r
- 00005A54 C3 4E 58 2942 JP LWRD ?0178\r
- 00005A57 2943 ToggleButton_new:\r
- 00005A57 CD 7A 82 2944 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005A5A 00 00 2945 DEFW 0\r
- 00005A5C FD E5 2946 PUSH IY\r
- 00005A5E DD 6E 0C 2947 LD L,(IX+12)\r
- 00005A61 DD 66 0D 2948 LD H,(IX+13)\r
- 00005A64 E5 2949 PUSH HL\r
- 00005A65 DD 6E 0A 2950 LD L,(IX+10)\r
- 00005A68 DD 66 0B 2951 LD H,(IX+11)\r
- 00005A6B E5 2952 PUSH HL\r
- 00005A6C CD FD 55 2953 CALL LWRD ?0438\r
- 00005A6F F1 2954 POP AF\r
- 00005A70 F1 2955 POP AF\r
- 00005A71 E5 2956 PUSH HL\r
- 00005A72 FD E1 2957 POP IY\r
- 00005A74 01 0A 00 2958 LD BC,10\r
- 00005A77 09 2959 ADD HL,BC\r
- 00005A78 7E 2960 LD A,(HL)\r
- 00005A79 F6 07 2961 OR 7\r
- 00005A7B 77 2962 LD (HL),A\r
- 00005A7C DD 46 0E 2963 LD B,(IX+14)\r
- 00005A7F FD 70 10 2964 LD (IY+16),B\r
- 00005A82 FD 36 17 CF 2965 LD (IY+23),LOW(ToggleButton_handler)\r
- 00005A86 FD 36 18 58 2966 LD (IY+24),HIGH(ToggleButton_handler)\r
- 00005A8A FD 36 19 00 2967 LD (IY+25),BYTE3 ToggleButton_handler\r
- 00005A8E FD 36 1A 6B 2968 LD (IY+26),LOW(ToggleButton_paint)\r
- 00005A92 FD 36 1B 59 2969 LD (IY+27),HIGH(ToggleButton_paint)\r
- 00005A96 FD 36 1C 00 2970 LD (IY+28),BYTE3 ToggleButton_paint\r
- 00005A9A FD 36 1D 77 2971 LD (IY+29),LOW(Button_add)\r
- 00005A9E FD 36 1E 58 2972 LD (IY+30),HIGH(Button_add)\r
- 00005AA2 FD 36 1F 00 2973 LD (IY+31),BYTE3 Button_add\r
- 00005AA6 C3 99 4C 2974 JP LWRD ?0418\r
- 00005AA9 2975 Dialog_handler:\r
- 00005AA9 CD EF 81 2976 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00005AAC FD E5 2977 PUSH IY\r
- 00005AAE D5 2978 PUSH DE\r
- 00005AAF FD E1 2979 POP IY\r
- 00005AB1 DD 6E 0A 2980 LD L,(IX+10)\r
- 00005AB4 DD 66 0B 2981 LD H,(IX+11)\r
- 00005AB7 E5 2982 PUSH HL\r
- 00005AB8 3E 00 2983 LD A,BYTE3 Window_handler\r
- 00005ABA 21 1A 51 2984 LD HL,LWRD Window_handler\r
- 00005ABD CD FB 81 2985 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005AC0 E1 2986 POP HL\r
- 00005AC1 21 01 02 2987 LD HL,513\r
- 00005AC4 DD 4E 04 2988 LD C,(IX+4)\r
- 00005AC7 DD 46 05 2989 LD B,(IX+5)\r
- 00005ACA A7 2990 AND A\r
- 00005ACB ED 42 2991 SBC HL,BC\r
- 00005ACD 20 40 2992 JR NZ,?0208\r
- 00005ACF 3E FF 2993 LD A,255\r
- 00005AD1 DD AE 0A 2994 XOR (IX+10)\r
- 00005AD4 DD B6 0B 2995 OR (IX+11)\r
- 00005AD7 20 36 2996 JR NZ,?0208\r
- 00005AD9 2997 ?0210:\r
- 00005AD9 2998 ?0209:\r
- 00005AD9 2999 ?0207:\r
- 00005AD9 FD CB 0B 66 3000 BIT 4,(IY+11)\r
- 00005ADD E5 3001 PUSH HL\r
- 00005ADE 28 05 3002 JR Z,?0212\r
- 00005AE0 3003 ?0211:\r
- 00005AE0 01 05 01 3004 LD BC,261\r
- 00005AE3 18 03 3005 JR ?0358\r
- 00005AE5 3006 ?0212:\r
- 00005AE5 01 02 01 3007 LD BC,258\r
- 00005AE8 3008 ?0358:\r
- 00005AE8 CD BE 53 3009 CALL LWRD ?0463\r
- 00005AEB E1 3010 POP HL\r
- 00005AEC 3011 ?0213:\r
- 00005AEC FD 4E 10 3012 LD C,(IY+16)\r
- 00005AEF 06 00 3013 LD B,0\r
- 00005AF1 C5 3014 PUSH BC\r
- 00005AF2 FD 5E 11 3015 LD E,(IY+17)\r
- 00005AF5 FD 56 12 3016 LD D,(IY+18)\r
- 00005AF8 FD 6E 11 3017 LD L,(IY+17)\r
- 00005AFB FD 66 12 3018 LD H,(IY+18)\r
- 00005AFE 0E 17 3019 LD C,23\r
- 00005B00 09 3020 ADD HL,BC\r
- 00005B01 4E 3021 LD C,(HL)\r
- 00005B02 23 3022 INC HL\r
- 00005B03 46 3023 LD B,(HL)\r
- 00005B04 23 3024 INC HL\r
- 00005B05 7E 3025 LD A,(HL)\r
- 00005B06 69 3026 LD L,C\r
- 00005B07 60 3027 LD H,B\r
- 00005B08 01 01 03 3028 LD BC,769\r
- 00005B0B CD FB 81 3029 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005B0E E1 3030 POP HL\r
- 00005B0F 3031 ?0208:\r
- 00005B0F 21 01 02 3032 LD HL,513\r
- 00005B12 DD 4E 04 3033 LD C,(IX+4)\r
- 00005B15 DD 46 05 3034 LD B,(IX+5)\r
- 00005B18 A7 3035 AND A\r
- 00005B19 ED 42 3036 SBC HL,BC\r
- 00005B1B 20 40 3037 JR NZ,?0215\r
- 00005B1D 3E FE 3038 LD A,254\r
- 00005B1F DD AE 0A 3039 XOR (IX+10)\r
- 00005B22 DD B6 0B 3040 OR (IX+11)\r
- 00005B25 20 36 3041 JR NZ,?0215\r
- 00005B27 3042 ?0217:\r
- 00005B27 3043 ?0216:\r
- 00005B27 3044 ?0214:\r
- 00005B27 FD CB 0B 66 3045 BIT 4,(IY+11)\r
- 00005B2B E5 3046 PUSH HL\r
- 00005B2C 28 05 3047 JR Z,?0219\r
- 00005B2E 3048 ?0218:\r
- 00005B2E 01 05 01 3049 LD BC,261\r
- 00005B31 18 03 3050 JR ?0359\r
- 00005B33 3051 ?0219:\r
- 00005B33 01 02 01 3052 LD BC,258\r
- 00005B36 3053 ?0359:\r
- 00005B36 CD BE 53 3054 CALL LWRD ?0463\r
- 00005B39 E1 3055 POP HL\r
- 00005B3A 3056 ?0220:\r
- 00005B3A FD 4E 10 3057 LD C,(IY+16)\r
- 00005B3D 06 00 3058 LD B,0\r
- 00005B3F C5 3059 PUSH BC\r
- 00005B40 FD 5E 11 3060 LD E,(IY+17)\r
- 00005B43 FD 56 12 3061 LD D,(IY+18)\r
- 00005B46 FD 6E 11 3062 LD L,(IY+17)\r
- 00005B49 FD 66 12 3063 LD H,(IY+18)\r
- 00005B4C 0E 17 3064 LD C,23\r
- 00005B4E 09 3065 ADD HL,BC\r
- 00005B4F 4E 3066 LD C,(HL)\r
- 00005B50 23 3067 INC HL\r
- 00005B51 46 3068 LD B,(HL)\r
- 00005B52 23 3069 INC HL\r
- 00005B53 7E 3070 LD A,(HL)\r
- 00005B54 69 3071 LD L,C\r
- 00005B55 60 3072 LD H,B\r
- 00005B56 01 02 03 3073 LD BC,770\r
- 00005B59 CD FB 81 3074 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005B5C E1 3075 POP HL\r
- 00005B5D 3076 ?0215:\r
- 00005B5D FD E1 3077 POP IY\r
- 00005B5F C3 A3 81 3078 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00005B62 3079 Dialog_new:\r
- 00005B62 CD 7A 82 3080 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005B65 FE FF 3081 DEFW -2\r
- 00005B67 FD E5 3082 PUSH IY\r
- 00005B69 DD 6E 0C 3083 LD L,(IX+12)\r
- 00005B6C DD 66 0D 3084 LD H,(IX+13)\r
- 00005B6F E5 3085 PUSH HL\r
- 00005B70 DD 6E 0A 3086 LD L,(IX+10)\r
- 00005B73 DD 66 0B 3087 LD H,(IX+11)\r
- 00005B76 E5 3088 PUSH HL\r
- 00005B77 CD FD 55 3089 CALL LWRD ?0438\r
- 00005B7A F1 3090 POP AF\r
- 00005B7B F1 3091 POP AF\r
- 00005B7C E5 3092 PUSH HL\r
- 00005B7D FD E1 3093 POP IY\r
- 00005B7F 01 0A 00 3094 LD BC,10\r
- 00005B82 09 3095 ADD HL,BC\r
- 00005B83 CB C6 3096 SET 0,(HL)\r
- 00005B85 DD 46 0E 3097 LD B,(IX+14)\r
- 00005B88 FD 70 10 3098 LD (IY+16),B\r
- 00005B8B FD 36 17 A9 3099 LD (IY+23),LOW(Dialog_handler)\r
- 00005B8F FD 36 18 5A 3100 LD (IY+24),HIGH(Dialog_handler)\r
- 00005B93 FD 36 19 00 3101 LD (IY+25),BYTE3 Dialog_handler\r
- 00005B97 FD 36 1A E7 3102 LD (IY+26),LOW(Window_paint)\r
- 00005B9B FD 36 1B 53 3103 LD (IY+27),HIGH(Window_paint)\r
- 00005B9F FD 36 1C 00 3104 LD (IY+28),BYTE3 Window_paint\r
- 00005BA3 FD 36 1D AB 3105 LD (IY+29),LOW(Window_add)\r
- 00005BA7 FD 36 1E 55 3106 LD (IY+30),HIGH(Window_add)\r
- 00005BAB FD 36 1F 00 3107 LD (IY+31),BYTE3 Window_add\r
- 00005BAF 21 FF 00 3108 LD HL,255\r
- 00005BB2 E5 3109 PUSH HL\r
- 00005BB3 2E 14 3110 LD L,20\r
- 00005BB5 E5 3111 PUSH HL\r
- 00005BB6 2E 28 3112 LD L,40\r
- 00005BB8 E5 3113 PUSH HL\r
- 00005BB9 21 E4 FF 3114 LD HL,65508\r
- 00005BBC CD 14 5C 3115 CALL LWRD ?0439\r
- 00005BBF F1 3116 POP AF\r
- 00005BC0 F1 3117 POP AF\r
- 00005BC1 F1 3118 POP AF\r
- 00005BC2 DD 75 FE 3119 LD (IX-2),L\r
- 00005BC5 DD 74 FF 3120 LD (IX-1),H\r
- 00005BC8 01 20 00 3121 LD BC,32\r
- 00005BCB 09 3122 ADD HL,BC\r
- 00005BCC E5 3123 PUSH HL\r
- 00005BCD 11 03 00 3124 LD DE,3\r
- 00005BD0 CD 70 4A 3125 CALL LWRD ?0450\r
- 00005BD3 E1 3126 POP HL\r
- 00005BD4 71 3127 LD (HL),C\r
- 00005BD5 23 3128 INC HL\r
- 00005BD6 70 3129 LD (HL),B\r
- 00005BD7 01 ED 84 3130 LD BC,?0221\r
- 00005BDA CD 30 5C 3131 CALL LWRD ?0456\r
- 00005BDD CD FB 81 3132 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005BE0 21 FE 00 3133 LD HL,254\r
- 00005BE3 E5 3134 PUSH HL\r
- 00005BE4 2E 14 3135 LD L,20\r
- 00005BE6 E5 3136 PUSH HL\r
- 00005BE7 2E 28 3137 LD L,40\r
- 00005BE9 E5 3138 PUSH HL\r
- 00005BEA 21 C8 FF 3139 LD HL,65480\r
- 00005BED CD 14 5C 3140 CALL LWRD ?0439\r
- 00005BF0 F1 3141 POP AF\r
- 00005BF1 F1 3142 POP AF\r
- 00005BF2 F1 3143 POP AF\r
- 00005BF3 DD 75 FE 3144 LD (IX-2),L\r
- 00005BF6 DD 74 FF 3145 LD (IX-1),H\r
- 00005BF9 01 20 00 3146 LD BC,32\r
- 00005BFC 09 3147 ADD HL,BC\r
- 00005BFD E5 3148 PUSH HL\r
- 00005BFE 11 07 00 3149 LD DE,7\r
- 00005C01 CD 70 4A 3150 CALL LWRD ?0450\r
- 00005C04 E1 3151 POP HL\r
- 00005C05 71 3152 LD (HL),C\r
- 00005C06 23 3153 INC HL\r
- 00005C07 70 3154 LD (HL),B\r
- 00005C08 01 F0 84 3155 LD BC,?0222\r
- 00005C0B CD 30 5C 3156 CALL LWRD ?0456\r
- 00005C0E CD FB 81 3157 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005C11 C3 99 4C 3158 JP LWRD ?0418\r
- 00005C14 3159 ?0439:\r
- 00005C14 DD 4E 0C 3160 LD C,(IX+12)\r
- 00005C17 DD 46 0D 3161 LD B,(IX+13)\r
- 00005C1A 09 3162 ADD HL,BC\r
- 00005C1B 4D 3163 LD C,L\r
- 00005C1C 44 3164 LD B,H\r
- 00005C1D 21 D0 FF 3165 LD HL,65488\r
- 00005C20 DD 5E 0A 3166 LD E,(IX+10)\r
- 00005C23 DD 56 0B 3167 LD D,(IX+11)\r
- 00005C26 19 3168 ADD HL,DE\r
- 00005C27 EB 3169 EX DE,HL\r
- 00005C28 3170 ?0440:\r
- 00005C28 3E 00 3171 LD A,BYTE3 Button_new\r
- 00005C2A 21 7D 58 3172 LD HL,LWRD Button_new\r
- 00005C2D C3 FB 81 3173 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00005C30 3174 ?0456:\r
- 00005C30 DD 5E FE 3175 LD E,(IX-2)\r
- 00005C33 DD 56 FF 3176 LD D,(IX-1)\r
- 00005C36 3E 00 3177 LD A,BYTE3 Component_setlabel\r
- 00005C38 21 A1 4C 3178 LD HL,LWRD Component_setlabel\r
- 00005C3B CD FB 81 3179 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005C3E DD 4E FE 3180 LD C,(IX-2)\r
- 00005C41 DD 46 FF 3181 LD B,(IX-1)\r
- 00005C44 FD E5 3182 PUSH IY\r
- 00005C46 D1 3183 POP DE\r
- 00005C47 FD 7E 1F 3184 LD A,(IY+31)\r
- 00005C4A FD 6E 1D 3185 LD L,(IY+29)\r
- 00005C4D FD 66 1E 3186 LD H,(IY+30)\r
- 00005C50 C9 3187 RET\r
- 00005C51 3188 Display_handler:\r
- 00005C51 CD EF 81 3189 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00005C54 FD E5 3190 PUSH IY\r
- 00005C56 D5 3191 PUSH DE\r
- 00005C57 FD E1 3192 POP IY\r
- 00005C59 DD 6E 0A 3193 LD L,(IX+10)\r
- 00005C5C DD 66 0B 3194 LD H,(IX+11)\r
- 00005C5F E5 3195 PUSH HL\r
- 00005C60 3E 00 3196 LD A,BYTE3 Button_handler\r
- 00005C62 21 0B 56 3197 LD HL,LWRD Button_handler\r
- 00005C65 CD FB 81 3198 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005C68 E1 3199 POP HL\r
- 00005C69 21 03 02 3200 LD HL,515\r
- 00005C6C DD 4E 04 3201 LD C,(IX+4)\r
- 00005C6F DD 46 05 3202 LD B,(IX+5)\r
- 00005C72 A7 3203 AND A\r
- 00005C73 ED 42 3204 SBC HL,BC\r
- 00005C75 20 40 3205 JR NZ,?0224\r
- 00005C77 FD CB 0A 5E 3206 BIT 3,(IY+10)\r
- 00005C7B 28 3A 3207 JR Z,?0224\r
- 00005C7D 3208 ?0226:\r
- 00005C7D 3209 ?0225:\r
- 00005C7D 3210 ?0223:\r
- 00005C7D 3E 08 3211 LD A,8\r
- 00005C7F DD AE 0A 3212 XOR (IX+10)\r
- 00005C82 DD B6 0B 3213 OR (IX+11)\r
- 00005C85 FD 5E 20 3214 LD E,(IY+32)\r
- 00005C88 FD 56 21 3215 LD D,(IY+33)\r
- 00005C8B 3E 00 3216 LD A,BYTE3 strlen\r
- 00005C8D 21 AB 73 3217 LD HL,LWRD strlen\r
- 00005C90 20 0D 3218 JR NZ,?0228\r
- 00005C92 3219 ?0227:\r
- 00005C92 CD 6A 4A 3220 CALL LWRD ?0448\r
- 00005C95 28 15 3221 JR Z,?0231\r
- 00005C97 3222 ?0229:\r
- 00005C97 CD BC 5C 3223 CALL LWRD ?0445\r
- 00005C9A 2B 3224 DEC HL\r
- 00005C9B 36 00 3225 LD (HL),0\r
- 00005C9D 3226 ?0230:\r
- 00005C9D 18 0D 3227 JR ?0231\r
- 00005C9F 3228 ?0228:\r
- 00005C9F CD C7 5C 3229 CALL LWRD ?0446\r
- 00005CA2 23 3230 INC HL\r
- 00005CA3 36 00 3231 LD (HL),0\r
- 00005CA5 CD BC 5C 3232 CALL LWRD ?0445\r
- 00005CA8 DD 46 0A 3233 LD B,(IX+10)\r
- 00005CAB 70 3234 LD (HL),B\r
- 00005CAC 3235 ?0231:\r
- 00005CAC 21 00 00 3236 LD HL,0\r
- 00005CAF E5 3237 PUSH HL\r
- 00005CB0 01 03 01 3238 LD BC,259\r
- 00005CB3 CD BE 53 3239 CALL LWRD ?0463\r
- 00005CB6 E1 3240 POP HL\r
- 00005CB7 3241 ?0224:\r
- 00005CB7 FD E1 3242 POP IY\r
- 00005CB9 C3 A3 81 3243 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00005CBC 3244 ?0445:\r
- 00005CBC FD 5E 20 3245 LD E,(IY+32)\r
- 00005CBF FD 56 21 3246 LD D,(IY+33)\r
- 00005CC2 3E 00 3247 LD A,BYTE3 strlen\r
- 00005CC4 21 AB 73 3248 LD HL,LWRD strlen\r
- 00005CC7 3249 ?0446:\r
- 00005CC7 CD FB 81 3250 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005CCA FD 4E 20 3251 LD C,(IY+32)\r
- 00005CCD FD 46 21 3252 LD B,(IY+33)\r
- 00005CD0 09 3253 ADD HL,BC\r
- 00005CD1 C9 3254 RET\r
- 00005CD2 3255 Display_paint:\r
- 00005CD2 C5 3256 PUSH BC\r
- 00005CD3 FD E5 3257 PUSH IY\r
- 00005CD5 DD E5 3258 PUSH IX\r
- 00005CD7 21 B8 FF 3259 LD HL,65464\r
- 00005CDA 39 3260 ADD HL,SP\r
- 00005CDB F9 3261 LD SP,HL\r
- 00005CDC D5 3262 PUSH DE\r
- 00005CDD DD E1 3263 POP IX\r
- 00005CDF AF 3264 XOR A\r
- 00005CE0 77 3265 LD (HL),A\r
- 00005CE1 23 3266 INC HL\r
- 00005CE2 77 3267 LD (HL),A\r
- 00005CE3 23 3268 INC HL\r
- 00005CE4 77 3269 LD (HL),A\r
- 00005CE5 23 3270 INC HL\r
- 00005CE6 77 3271 LD (HL),A\r
- 00005CE7 21 0A 00 3272 LD HL,10\r
- 00005CEA ED 4B 3F 87 3273 LD BC,(global)\r
- 00005CEE 09 3274 ADD HL,BC\r
- 00005CEF 7E 3275 LD A,(HL)\r
- 00005CF0 23 3276 INC HL\r
- 00005CF1 66 3277 LD H,(HL)\r
- 00005CF2 6F 3278 LD L,A\r
- 00005CF3 46 3279 LD B,(HL)\r
- 00005CF4 23 3280 INC HL\r
- 00005CF5 66 3281 LD H,(HL)\r
- 00005CF6 68 3282 LD L,B\r
- 00005CF7 E5 3283 PUSH HL\r
- 00005CF8 21 0E 00 3284 LD HL,14\r
- 00005CFB 19 3285 ADD HL,DE\r
- 00005CFC 4E 3286 LD C,(HL)\r
- 00005CFD 23 3287 INC HL\r
- 00005CFE 46 3288 LD B,(HL)\r
- 00005CFF E1 3289 POP HL\r
- 00005D00 A7 3290 AND A\r
- 00005D01 ED 42 3291 SBC HL,BC\r
- 00005D03 28 03 3292 JR Z,?0233\r
- 00005D05 3293 ?0232:\r
- 00005D05 CD 66 55 3294 CALL LWRD ?0473\r
- 00005D08 3295 ?0233:\r
- 00005D08 DD CB 0A 46 3296 BIT 0,(IX+10)\r
- 00005D0C CA 16 5E 3297 JP Z,?0248\r
- 00005D0F 3298 ?0234:\r
- 00005D0F 21 02 00 3299 LD HL,2\r
- 00005D12 39 3300 ADD HL,SP\r
- 00005D13 E5 3301 PUSH HL\r
- 00005D14 2B 3302 DEC HL\r
- 00005D15 2B 3303 DEC HL\r
- 00005D16 CD CF 53 3304 CALL LWRD ?0468\r
- 00005D19 E1 3305 POP HL\r
- 00005D1A 21 02 00 3306 LD HL,2\r
- 00005D1D 39 3307 ADD HL,SP\r
- 00005D1E 4E 3308 LD C,(HL)\r
- 00005D1F 23 3309 INC HL\r
- 00005D20 46 3310 LD B,(HL)\r
- 00005D21 2B 3311 DEC HL\r
- 00005D22 2B 3312 DEC HL\r
- 00005D23 2B 3313 DEC HL\r
- 00005D24 CD 5A 58 3314 CALL LWRD ?0458\r
- 00005D27 CD FB 81 3315 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005D2A DD 6E 08 3316 LD L,(IX+8)\r
- 00005D2D DD 66 09 3317 LD H,(IX+9)\r
- 00005D30 E5 3318 PUSH HL\r
- 00005D31 DD 6E 06 3319 LD L,(IX+6)\r
- 00005D34 DD 66 07 3320 LD H,(IX+7)\r
- 00005D37 E5 3321 PUSH HL\r
- 00005D38 21 06 00 3322 LD HL,6\r
- 00005D3B 39 3323 ADD HL,SP\r
- 00005D3C 4E 3324 LD C,(HL)\r
- 00005D3D 23 3325 INC HL\r
- 00005D3E 46 3326 LD B,(HL)\r
- 00005D3F C5 3327 PUSH BC\r
- 00005D40 2B 3328 DEC HL\r
- 00005D41 2B 3329 DEC HL\r
- 00005D42 2B 3330 DEC HL\r
- 00005D43 4E 3331 LD C,(HL)\r
- 00005D44 23 3332 INC HL\r
- 00005D45 46 3333 LD B,(HL)\r
- 00005D46 DD CB 0A 4E 3334 BIT 1,(IX+10)\r
- 00005D4A 28 07 3335 JR Z,?0237\r
- 00005D4C DD 5E 10 3336 LD E,(IX+16)\r
- 00005D4F 16 00 3337 LD D,0\r
- 00005D51 18 03 3338 JR ?0238\r
- 00005D53 3339 ?0237:\r
- 00005D53 11 00 00 3340 LD DE,0\r
- 00005D56 3341 ?0238:\r
- 00005D56 CD 3A 49 3342 CALL LWRD ?0471\r
- 00005D59 E1 3343 POP HL\r
- 00005D5A E1 3344 POP HL\r
- 00005D5B E1 3345 POP HL\r
- 00005D5C DD CB 0A 7E 3346 BIT 7,(IX+10)\r
- 00005D60 DD 4E 08 3347 LD C,(IX+8)\r
- 00005D63 DD 46 09 3348 LD B,(IX+9)\r
- 00005D66 DD 5E 06 3349 LD E,(IX+6)\r
- 00005D69 DD 56 07 3350 LD D,(IX+7)\r
- 00005D6C 20 07 3351 JR NZ,?0240\r
- 00005D6E 3352 ?0239:\r
- 00005D6E 3E 00 3353 LD A,BYTE3 FillRectNC\r
- 00005D70 21 F7 47 3354 LD HL,LWRD FillRectNC\r
- 00005D73 18 05 3355 JR ?0364\r
- 00005D75 3356 ?0240:\r
- 00005D75 3E 00 3357 LD A,BYTE3 DrawRectNC\r
- 00005D77 21 6D 47 3358 LD HL,LWRD DrawRectNC\r
- 00005D7A 3359 ?0364:\r
- 00005D7A CD FB 81 3360 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005D7D 3361 ?0241:\r
- 00005D7D DD 5E 20 3362 LD E,(IX+32)\r
- 00005D80 DD 56 21 3363 LD D,(IX+33)\r
- 00005D83 21 0A 00 3364 LD HL,10\r
- 00005D86 ED 4B 3F 87 3365 LD BC,(global)\r
- 00005D8A 09 3366 ADD HL,BC\r
- 00005D8B 46 3367 LD B,(HL)\r
- 00005D8C 23 3368 INC HL\r
- 00005D8D 66 3369 LD H,(HL)\r
- 00005D8E 68 3370 LD L,B\r
- 00005D8F 01 05 00 3371 LD BC,5\r
- 00005D92 09 3372 ADD HL,BC\r
- 00005D93 4E 3373 LD C,(HL)\r
- 00005D94 23 3374 INC HL\r
- 00005D95 46 3375 LD B,(HL)\r
- 00005D96 23 3376 INC HL\r
- 00005D97 7E 3377 LD A,(HL)\r
- 00005D98 69 3378 LD L,C\r
- 00005D99 60 3379 LD H,B\r
- 00005D9A CD 75 4A 3380 CALL LWRD ?0449\r
- 00005D9D DD 6E 08 3381 LD L,(IX+8)\r
- 00005DA0 DD 66 09 3382 LD H,(IX+9)\r
- 00005DA3 A7 3383 AND A\r
- 00005DA4 ED 42 3384 SBC HL,BC\r
- 00005DA6 EB 3385 EX DE,HL\r
- 00005DA7 01 02 00 3386 LD BC,2\r
- 00005DAA CD EB 82 3387 CALL LWRD ?SS_DIV_L02\r
- 00005DAD 69 3388 LD L,C\r
- 00005DAE 60 3389 LD H,B\r
- 00005DAF 39 3390 ADD HL,SP\r
- 00005DB0 46 3391 LD B,(HL)\r
- 00005DB1 23 3392 INC HL\r
- 00005DB2 66 3393 LD H,(HL)\r
- 00005DB3 68 3394 LD L,B\r
- 00005DB4 19 3395 ADD HL,DE\r
- 00005DB5 01 07 00 3396 LD BC,7\r
- 00005DB8 09 3397 ADD HL,BC\r
- 00005DB9 4D 3398 LD C,L\r
- 00005DBA 44 3399 LD B,H\r
- 00005DBB 21 00 00 3400 LD HL,0\r
- 00005DBE 39 3401 ADD HL,SP\r
- 00005DBF 5E 3402 LD E,(HL)\r
- 00005DC0 23 3403 INC HL\r
- 00005DC1 56 3404 LD D,(HL)\r
- 00005DC2 13 3405 INC DE\r
- 00005DC3 13 3406 INC DE\r
- 00005DC4 3E 00 3407 LD A,BYTE3 Move\r
- 00005DC6 21 EB 46 3408 LD HL,LWRD Move\r
- 00005DC9 CD FB 81 3409 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005DCC DD CB 0B 46 3410 BIT 0,(IX+11)\r
- 00005DD0 28 36 3411 JR Z,?0243\r
- 00005DD2 3412 ?0242:\r
- 00005DD2 FD 21 00 00 3413 LD IY,0\r
- 00005DD6 3414 ?0245:\r
- 00005DD6 DD 5E 20 3415 LD E,(IX+32)\r
- 00005DD9 DD 56 21 3416 LD D,(IX+33)\r
- 00005DDC 3E 00 3417 LD A,BYTE3 strlen\r
- 00005DDE 21 AB 73 3418 LD HL,LWRD strlen\r
- 00005DE1 CD 75 4A 3419 CALL LWRD ?0449\r
- 00005DE4 FD E5 3420 PUSH IY\r
- 00005DE6 E1 3421 POP HL\r
- 00005DE7 A7 3422 AND A\r
- 00005DE8 ED 42 3423 SBC HL,BC\r
- 00005DEA 21 06 00 3424 LD HL,6\r
- 00005DED 30 0B 3425 JR NC,?0244\r
- 00005DEF 3426 ?0246:\r
- 00005DEF 39 3427 ADD HL,SP\r
- 00005DF0 FD E5 3428 PUSH IY\r
- 00005DF2 C1 3429 POP BC\r
- 00005DF3 09 3430 ADD HL,BC\r
- 00005DF4 36 2A 3431 LD (HL),42\r
- 00005DF6 FD 23 3432 INC IY\r
- 00005DF8 18 DC 3433 JR ?0245\r
- 00005DFA 3434 ?0244:\r
- 00005DFA 39 3435 ADD HL,SP\r
- 00005DFB FD E5 3436 PUSH IY\r
- 00005DFD C1 3437 POP BC\r
- 00005DFE 09 3438 ADD HL,BC\r
- 00005DFF 36 00 3439 LD (HL),0\r
- 00005E01 21 06 00 3440 LD HL,6\r
- 00005E04 39 3441 ADD HL,SP\r
- 00005E05 EB 3442 EX DE,HL\r
- 00005E06 18 06 3443 JR ?0365\r
- 00005E08 3444 ?0243:\r
- 00005E08 DD 5E 20 3445 LD E,(IX+32)\r
- 00005E0B DD 56 21 3446 LD D,(IX+33)\r
- 00005E0E 3447 ?0365:\r
- 00005E0E 3E 00 3448 LD A,BYTE3 Text\r
- 00005E10 21 81 48 3449 LD HL,LWRD Text\r
- 00005E13 CD FB 81 3450 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005E16 3451 ?0248:\r
- 00005E16 3452 ?0235:\r
- 00005E16 21 48 00 3453 LD HL,72\r
- 00005E19 39 3454 ADD HL,SP\r
- 00005E1A F9 3455 LD SP,HL\r
- 00005E1B C3 A6 48 3456 JP LWRD ?0411\r
- 00005E1E 3457 Display_new:\r
- 00005E1E CD 7A 82 3458 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005E21 00 00 3459 DEFW 0\r
- 00005E23 FD E5 3460 PUSH IY\r
- 00005E25 DD 6E 0E 3461 LD L,(IX+14)\r
- 00005E28 DD 66 0F 3462 LD H,(IX+15)\r
- 00005E2B E5 3463 PUSH HL\r
- 00005E2C DD 6E 0C 3464 LD L,(IX+12)\r
- 00005E2F DD 66 0D 3465 LD H,(IX+13)\r
- 00005E32 E5 3466 PUSH HL\r
- 00005E33 DD 6E 0A 3467 LD L,(IX+10)\r
- 00005E36 DD 66 0B 3468 LD H,(IX+11)\r
- 00005E39 E5 3469 PUSH HL\r
- 00005E3A DD 5E 02 3470 LD E,(IX+2)\r
- 00005E3D DD 56 03 3471 LD D,(IX+3)\r
- 00005E40 CD 28 5C 3472 CALL LWRD ?0440\r
- 00005E43 F1 3473 POP AF\r
- 00005E44 F1 3474 POP AF\r
- 00005E45 F1 3475 POP AF\r
- 00005E46 E5 3476 PUSH HL\r
- 00005E47 FD E1 3477 POP IY\r
- 00005E49 01 0A 00 3478 LD BC,10\r
- 00005E4C 09 3479 ADD HL,BC\r
- 00005E4D CB DE 3480 SET 3,(HL)\r
- 00005E4F 01 F7 84 3481 LD BC,?0249\r
- 00005E52 FD E5 3482 PUSH IY\r
- 00005E54 D1 3483 POP DE\r
- 00005E55 3E 00 3484 LD A,BYTE3 Component_setlabel\r
- 00005E57 21 A1 4C 3485 LD HL,LWRD Component_setlabel\r
- 00005E5A CD FB 81 3486 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005E5D FD 36 1A D2 3487 LD (IY+26),LOW(Display_paint)\r
- 00005E61 FD 36 1B 5C 3488 LD (IY+27),HIGH(Display_paint)\r
- 00005E65 FD 36 1C 00 3489 LD (IY+28),BYTE3 Display_paint\r
- 00005E69 FD 36 17 51 3490 LD (IY+23),LOW(Display_handler)\r
- 00005E6D FD 36 18 5C 3491 LD (IY+24),HIGH(Display_handler)\r
- 00005E71 FD 36 19 00 3492 LD (IY+25),BYTE3 Display_handler\r
- 00005E75 C3 99 4C 3493 JP LWRD ?0418\r
- 00005E78 3494 Label_handler:\r
- 00005E78 CD EF 81 3495 CALL LWRD ?ENT_PARM_DIRECT_L09\r
- 00005E7B C3 A3 81 3496 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00005E7E 3497 Label_paint:\r
- 00005E7E C5 3498 PUSH BC\r
- 00005E7F DD E5 3499 PUSH IX\r
- 00005E81 F5 3500 PUSH AF\r
- 00005E82 F5 3501 PUSH AF\r
- 00005E83 D5 3502 PUSH DE\r
- 00005E84 DD E1 3503 POP IX\r
- 00005E86 21 02 00 3504 LD HL,2\r
- 00005E89 39 3505 ADD HL,SP\r
- 00005E8A AF 3506 XOR A\r
- 00005E8B 77 3507 LD (HL),A\r
- 00005E8C 23 3508 INC HL\r
- 00005E8D 77 3509 LD (HL),A\r
- 00005E8E 2B 3510 DEC HL\r
- 00005E8F 2B 3511 DEC HL\r
- 00005E90 2B 3512 DEC HL\r
- 00005E91 77 3513 LD (HL),A\r
- 00005E92 23 3514 INC HL\r
- 00005E93 77 3515 LD (HL),A\r
- 00005E94 21 0A 00 3516 LD HL,10\r
- 00005E97 ED 4B 3F 87 3517 LD BC,(global)\r
- 00005E9B 09 3518 ADD HL,BC\r
- 00005E9C 7E 3519 LD A,(HL)\r
- 00005E9D 23 3520 INC HL\r
- 00005E9E 66 3521 LD H,(HL)\r
- 00005E9F 6F 3522 LD L,A\r
- 00005EA0 46 3523 LD B,(HL)\r
- 00005EA1 23 3524 INC HL\r
- 00005EA2 66 3525 LD H,(HL)\r
- 00005EA3 68 3526 LD L,B\r
- 00005EA4 E5 3527 PUSH HL\r
- 00005EA5 21 0E 00 3528 LD HL,14\r
- 00005EA8 19 3529 ADD HL,DE\r
- 00005EA9 4E 3530 LD C,(HL)\r
- 00005EAA 23 3531 INC HL\r
- 00005EAB 46 3532 LD B,(HL)\r
- 00005EAC E1 3533 POP HL\r
- 00005EAD A7 3534 AND A\r
- 00005EAE ED 42 3535 SBC HL,BC\r
- 00005EB0 28 03 3536 JR Z,?0251\r
- 00005EB2 3537 ?0250:\r
- 00005EB2 CD 66 55 3538 CALL LWRD ?0473\r
- 00005EB5 3539 ?0251:\r
- 00005EB5 DD CB 0A 46 3540 BIT 0,(IX+10)\r
- 00005EB9 28 21 3541 JR Z,?0253\r
- 00005EBB 3542 ?0252:\r
- 00005EBB 21 00 00 3543 LD HL,0\r
- 00005EBE 39 3544 ADD HL,SP\r
- 00005EBF E5 3545 PUSH HL\r
- 00005EC0 CD CD 53 3546 CALL LWRD ?0467\r
- 00005EC3 E1 3547 POP HL\r
- 00005EC4 21 00 00 3548 LD HL,0\r
- 00005EC7 39 3549 ADD HL,SP\r
- 00005EC8 4E 3550 LD C,(HL)\r
- 00005EC9 23 3551 INC HL\r
- 00005ECA 46 3552 LD B,(HL)\r
- 00005ECB C5 3553 PUSH BC\r
- 00005ECC 23 3554 INC HL\r
- 00005ECD 4E 3555 LD C,(HL)\r
- 00005ECE 23 3556 INC HL\r
- 00005ECF 46 3557 LD B,(HL)\r
- 00005ED0 DD E5 3558 PUSH IX\r
- 00005ED2 D1 3559 POP DE\r
- 00005ED3 3E 00 3560 LD A,BYTE3 Button_drawtext\r
- 00005ED5 21 C2 56 3561 LD HL,LWRD Button_drawtext\r
- 00005ED8 CD FB 81 3562 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005EDB E1 3563 POP HL\r
- 00005EDC 3564 ?0253:\r
- 00005EDC C3 4E 58 3565 JP LWRD ?0178\r
- 00005EDF 3566 Label_new:\r
- 00005EDF CD 7A 82 3567 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005EE2 00 00 3568 DEFW 0\r
- 00005EE4 FD E5 3569 PUSH IY\r
- 00005EE6 DD 6E 0C 3570 LD L,(IX+12)\r
- 00005EE9 DD 66 0D 3571 LD H,(IX+13)\r
- 00005EEC E5 3572 PUSH HL\r
- 00005EED DD 6E 0A 3573 LD L,(IX+10)\r
- 00005EF0 DD 66 0B 3574 LD H,(IX+11)\r
- 00005EF3 E5 3575 PUSH HL\r
- 00005EF4 CD FD 55 3576 CALL LWRD ?0438\r
- 00005EF7 F1 3577 POP AF\r
- 00005EF8 F1 3578 POP AF\r
- 00005EF9 E5 3579 PUSH HL\r
- 00005EFA FD E1 3580 POP IY\r
- 00005EFC 01 20 00 3581 LD BC,32\r
- 00005EFF 09 3582 ADD HL,BC\r
- 00005F00 DD 4E 0E 3583 LD C,(IX+14)\r
- 00005F03 71 3584 LD (HL),C\r
- 00005F04 DD 46 0F 3585 LD B,(IX+15)\r
- 00005F07 23 3586 INC HL\r
- 00005F08 70 3587 LD (HL),B\r
- 00005F09 FD 36 0A 01 3588 LD (IY+10),1\r
- 00005F0D FD 36 0B 00 3589 LD (IY+11),0\r
- 00005F11 FD 36 17 78 3590 LD (IY+23),LOW(Label_handler)\r
- 00005F15 FD 36 18 5E 3591 LD (IY+24),HIGH(Label_handler)\r
- 00005F19 FD 36 19 00 3592 LD (IY+25),BYTE3 Label_handler\r
- 00005F1D FD 36 1A 7E 3593 LD (IY+26),LOW(Label_paint)\r
- 00005F21 FD 36 1B 5E 3594 LD (IY+27),HIGH(Label_paint)\r
- 00005F25 FD 36 1C 00 3595 LD (IY+28),BYTE3 Label_paint\r
- 00005F29 FD 36 1D 77 3596 LD (IY+29),LOW(Button_add)\r
- 00005F2D FD 36 1E 58 3597 LD (IY+30),HIGH(Button_add)\r
- 00005F31 FD 36 1F 00 3598 LD (IY+31),BYTE3 Button_add\r
- 00005F35 C3 99 4C 3599 JP LWRD ?0418\r
- 00005F38 3600 rootWindow_handler:\r
- 00005F38 CD 7A 82 3601 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005F3B 00 00 3602 DEFW 0\r
- 00005F3D DD 6E 0A 3603 LD L,(IX+10)\r
- 00005F40 DD 66 0B 3604 LD H,(IX+11)\r
- 00005F43 E5 3605 PUSH HL\r
- 00005F44 DD 5E 02 3606 LD E,(IX+2)\r
- 00005F47 DD 56 03 3607 LD D,(IX+3)\r
- 00005F4A 3E 00 3608 LD A,BYTE3 Window_handler\r
- 00005F4C 21 1A 51 3609 LD HL,LWRD Window_handler\r
- 00005F4F CD FB 81 3610 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005F52 E1 3611 POP HL\r
- 00005F53 C3 A3 81 3612 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00005F56 3613 screenbuilder:\r
- 00005F56 CD 7A 82 3614 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00005F59 CE FF 3615 DEFW 65486\r
- 00005F5B FD E5 3616 PUSH IY\r
- 00005F5D DD 36 D8 00 3617 LD (IX-40),0\r
- 00005F61 21 00 00 3618 LD HL,0\r
- 00005F64 E5 3619 PUSH HL\r
- 00005F65 C5 3620 PUSH BC\r
- 00005F66 3E 00 3621 LD A,BYTE3 open\r
- 00005F68 21 CD 7E 3622 LD HL,LWRD open\r
- 00005F6B CD FB 81 3623 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005F6E F1 3624 POP AF\r
- 00005F6F F1 3625 POP AF\r
- 00005F70 DD 75 D4 3626 LD (IX-44),L\r
- 00005F73 DD 74 D5 3627 LD (IX-43),H\r
- 00005F76 DD 36 F0 2B 3628 LD (IX-16),43\r
- 00005F7A DD 36 F1 00 3629 LD (IX-15),0\r
- 00005F7E DD 36 F2 1A 3630 LD (IX-14),26\r
- 00005F82 DD 36 F3 00 3631 LD (IX-13),0\r
- 00005F86 3632 ?0256:\r
- 00005F86 DD 36 F4 00 3633 LD (IX-12),0\r
- 00005F8A DD 7E D8 3634 LD A,(IX-40)\r
- 00005F8D FE 73 3635 CP 115\r
- 00005F8F 20 18 3636 JR NZ,?0258\r
- 00005F91 3637 ?0257:\r
- 00005F91 DD 6E D9 3638 LD L,(IX-39)\r
- 00005F94 DD 66 DA 3639 LD H,(IX-38)\r
- 00005F97 DD 75 F0 3640 LD (IX-16),L\r
- 00005F9A DD 74 F1 3641 LD (IX-15),H\r
- 00005F9D DD 6E DB 3642 LD L,(IX-37)\r
- 00005FA0 DD 66 DC 3643 LD H,(IX-36)\r
- 00005FA3 DD 75 F2 3644 LD (IX-14),L\r
- 00005FA6 DD 74 F3 3645 LD (IX-13),H\r
- 00005FA9 3646 ?0258:\r
- 00005FA9 DD 7E D8 3647 LD A,(IX-40)\r
- 00005FAC FE 42 3648 CP 66\r
- 00005FAE 28 07 3649 JR Z,?0261\r
- 00005FB0 DD 7E D8 3650 LD A,(IX-40)\r
- 00005FB3 FE 4D 3651 CP 77\r
- 00005FB5 20 4F 3652 JR NZ,?0260\r
- 00005FB7 3653 ?0261:\r
- 00005FB7 3654 ?0262:\r
- 00005FB7 3655 ?0259:\r
- 00005FB7 DD 4E DD 3656 LD C,(IX-35)\r
- 00005FBA 06 00 3657 LD B,0\r
- 00005FBC C5 3658 PUSH BC\r
- 00005FBD CD 16 63 3659 CALL LWRD ?0482\r
- 00005FC0 D5 3660 PUSH DE\r
- 00005FC1 DD 4E DB 3661 LD C,(IX-37)\r
- 00005FC4 DD 5E F0 3662 LD E,(IX-16)\r
- 00005FC7 DD 56 F1 3663 LD D,(IX-15)\r
- 00005FCA CD 1F 63 3664 CALL LWRD ?0483\r
- 00005FCD D5 3665 PUSH DE\r
- 00005FCE DD 4E DA 3666 LD C,(IX-38)\r
- 00005FD1 DD 5E F2 3667 LD E,(IX-14)\r
- 00005FD4 DD 56 F3 3668 LD D,(IX-13)\r
- 00005FD7 CD AE 81 3669 CALL LWRD ?S_MUL_L02\r
- 00005FDA D5 3670 PUSH DE\r
- 00005FDB DD 5E D9 3671 LD E,(IX-39)\r
- 00005FDE 50 3672 LD D,B\r
- 00005FDF DD 4E F0 3673 LD C,(IX-16)\r
- 00005FE2 DD 46 F1 3674 LD B,(IX-15)\r
- 00005FE5 CD AE 81 3675 CALL LWRD ?S_MUL_L02\r
- 00005FE8 3E 00 3676 LD A,BYTE3 Button_new\r
- 00005FEA 21 7D 58 3677 LD HL,LWRD Button_new\r
- 00005FED C1 3678 POP BC\r
- 00005FEE CD FB 81 3679 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00005FF1 F1 3680 POP AF\r
- 00005FF2 F1 3681 POP AF\r
- 00005FF3 F1 3682 POP AF\r
- 00005FF4 E5 3683 PUSH HL\r
- 00005FF5 FD E1 3684 POP IY\r
- 00005FF7 DD 7E D8 3685 LD A,(IX-40)\r
- 00005FFA FE 4D 3686 CP 77\r
- 00005FFC 20 04 3687 JR NZ,?0264\r
- 00005FFE 3688 ?0263:\r
- 00005FFE FD CB 0A F6 3689 SET 6,(IY+10)\r
- 00006002 3690 ?0264:\r
- 00006002 DD 36 F4 01 3691 LD (IX-12),1\r
- 00006006 3692 ?0260:\r
- 00006006 DD 7E D8 3693 LD A,(IX-40)\r
- 00006009 FE 54 3694 CP 84\r
- 0000600B 20 44 3695 JR NZ,?0266\r
- 0000600D 3696 ?0265:\r
- 0000600D DD 4E DD 3697 LD C,(IX-35)\r
- 00006010 06 00 3698 LD B,0\r
- 00006012 C5 3699 PUSH BC\r
- 00006013 CD 16 63 3700 CALL LWRD ?0482\r
- 00006016 D5 3701 PUSH DE\r
- 00006017 DD 4E DB 3702 LD C,(IX-37)\r
- 0000601A DD 5E F0 3703 LD E,(IX-16)\r
- 0000601D DD 56 F1 3704 LD D,(IX-15)\r
- 00006020 CD 1F 63 3705 CALL LWRD ?0483\r
- 00006023 D5 3706 PUSH DE\r
- 00006024 DD 4E DA 3707 LD C,(IX-38)\r
- 00006027 DD 5E F2 3708 LD E,(IX-14)\r
- 0000602A DD 56 F3 3709 LD D,(IX-13)\r
- 0000602D CD AE 81 3710 CALL LWRD ?S_MUL_L02\r
- 00006030 D5 3711 PUSH DE\r
- 00006031 DD 5E D9 3712 LD E,(IX-39)\r
- 00006034 50 3713 LD D,B\r
- 00006035 DD 4E F0 3714 LD C,(IX-16)\r
- 00006038 DD 46 F1 3715 LD B,(IX-15)\r
- 0000603B CD AE 81 3716 CALL LWRD ?S_MUL_L02\r
- 0000603E 3E 00 3717 LD A,BYTE3 ToggleButton_new\r
- 00006040 21 57 5A 3718 LD HL,LWRD ToggleButton_new\r
- 00006043 C1 3719 POP BC\r
- 00006044 CD FB 81 3720 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006047 F1 3721 POP AF\r
- 00006048 F1 3722 POP AF\r
- 00006049 F1 3723 POP AF\r
- 0000604A E5 3724 PUSH HL\r
- 0000604B FD E1 3725 POP IY\r
- 0000604D DD 36 F4 01 3726 LD (IX-12),1\r
- 00006051 3727 ?0266:\r
- 00006051 DD 7E D8 3728 LD A,(IX-40)\r
- 00006054 FE 44 3729 CP 68\r
- 00006056 20 44 3730 JR NZ,?0268\r
- 00006058 3731 ?0267:\r
- 00006058 DD 4E DD 3732 LD C,(IX-35)\r
- 0000605B 06 00 3733 LD B,0\r
- 0000605D C5 3734 PUSH BC\r
- 0000605E CD 16 63 3735 CALL LWRD ?0482\r
- 00006061 D5 3736 PUSH DE\r
- 00006062 DD 4E DB 3737 LD C,(IX-37)\r
- 00006065 DD 5E F0 3738 LD E,(IX-16)\r
- 00006068 DD 56 F1 3739 LD D,(IX-15)\r
- 0000606B CD 1F 63 3740 CALL LWRD ?0483\r
- 0000606E D5 3741 PUSH DE\r
- 0000606F DD 4E DA 3742 LD C,(IX-38)\r
- 00006072 DD 5E F2 3743 LD E,(IX-14)\r
- 00006075 DD 56 F3 3744 LD D,(IX-13)\r
- 00006078 CD AE 81 3745 CALL LWRD ?S_MUL_L02\r
- 0000607B D5 3746 PUSH DE\r
- 0000607C DD 5E D9 3747 LD E,(IX-39)\r
- 0000607F 50 3748 LD D,B\r
- 00006080 DD 4E F0 3749 LD C,(IX-16)\r
- 00006083 DD 46 F1 3750 LD B,(IX-15)\r
- 00006086 CD AE 81 3751 CALL LWRD ?S_MUL_L02\r
- 00006089 3E 00 3752 LD A,BYTE3 Display_new\r
- 0000608B 21 1E 5E 3753 LD HL,LWRD Display_new\r
- 0000608E C1 3754 POP BC\r
- 0000608F CD FB 81 3755 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006092 F1 3756 POP AF\r
- 00006093 F1 3757 POP AF\r
- 00006094 F1 3758 POP AF\r
- 00006095 E5 3759 PUSH HL\r
- 00006096 FD E1 3760 POP IY\r
- 00006098 DD 36 F4 01 3761 LD (IX-12),1\r
- 0000609C 3762 ?0268:\r
- 0000609C DD 7E D8 3763 LD A,(IX-40)\r
- 0000609F FE 4C 3764 CP 76\r
- 000060A1 20 47 3765 JR NZ,?0270\r
- 000060A3 3766 ?0269:\r
- 000060A3 21 0C 00 3767 LD HL,12\r
- 000060A6 39 3768 ADD HL,SP\r
- 000060A7 01 12 00 3769 LD BC,18\r
- 000060AA 09 3770 ADD HL,BC\r
- 000060AB E5 3771 PUSH HL\r
- 000060AC CD 16 63 3772 CALL LWRD ?0482\r
- 000060AF D5 3773 PUSH DE\r
- 000060B0 DD 4E DB 3774 LD C,(IX-37)\r
- 000060B3 DD 5E F0 3775 LD E,(IX-16)\r
- 000060B6 DD 56 F1 3776 LD D,(IX-15)\r
- 000060B9 CD 1F 63 3777 CALL LWRD ?0483\r
- 000060BC D5 3778 PUSH DE\r
- 000060BD DD 4E DA 3779 LD C,(IX-38)\r
- 000060C0 DD 5E F2 3780 LD E,(IX-14)\r
- 000060C3 DD 56 F3 3781 LD D,(IX-13)\r
- 000060C6 CD AE 81 3782 CALL LWRD ?S_MUL_L02\r
- 000060C9 D5 3783 PUSH DE\r
- 000060CA DD 5E D9 3784 LD E,(IX-39)\r
- 000060CD 50 3785 LD D,B\r
- 000060CE DD 4E F0 3786 LD C,(IX-16)\r
- 000060D1 DD 46 F1 3787 LD B,(IX-15)\r
- 000060D4 CD AE 81 3788 CALL LWRD ?S_MUL_L02\r
- 000060D7 3E 00 3789 LD A,BYTE3 Label_new\r
- 000060D9 21 DF 5E 3790 LD HL,LWRD Label_new\r
- 000060DC C1 3791 POP BC\r
- 000060DD CD FB 81 3792 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000060E0 F1 3793 POP AF\r
- 000060E1 F1 3794 POP AF\r
- 000060E2 F1 3795 POP AF\r
- 000060E3 E5 3796 PUSH HL\r
- 000060E4 FD E1 3797 POP IY\r
- 000060E6 DD 36 F4 01 3798 LD (IX-12),1\r
- 000060EA 3799 ?0270:\r
- 000060EA DD 7E D8 3800 LD A,(IX-40)\r
- 000060ED FE 41 3801 CP 65\r
- 000060EF 20 51 3802 JR NZ,?0272\r
- 000060F1 3803 ?0271:\r
- 000060F1 21 26 00 3804 LD HL,38\r
- 000060F4 DD 4E 02 3805 LD C,(IX+2)\r
- 000060F7 DD 46 03 3806 LD B,(IX+3)\r
- 000060FA 09 3807 ADD HL,BC\r
- 000060FB E5 3808 PUSH HL\r
- 000060FC 21 2B 00 3809 LD HL,43\r
- 000060FF 39 3810 ADD HL,SP\r
- 00006100 EB 3811 EX DE,HL\r
- 00006101 E1 3812 POP HL\r
- 00006102 73 3813 LD (HL),E\r
- 00006103 23 3814 INC HL\r
- 00006104 72 3815 LD (HL),D\r
- 00006105 DD 6E DE 3816 LD L,(IX-34)\r
- 00006108 DD 66 DF 3817 LD H,(IX-33)\r
- 0000610B DD 75 F8 3818 LD (IX-8),L\r
- 0000610E DD 74 F9 3819 LD (IX-7),H\r
- 00006111 DD 6E E0 3820 LD L,(IX-32)\r
- 00006114 DD 66 E1 3821 LD H,(IX-31)\r
- 00006117 DD 75 FA 3822 LD (IX-6),L\r
- 0000611A DD 74 FB 3823 LD (IX-5),H\r
- 0000611D 21 16 00 3824 LD HL,22\r
- 00006120 39 3825 ADD HL,SP\r
- 00006121 4E 3826 LD C,(HL)\r
- 00006122 23 3827 INC HL\r
- 00006123 46 3828 LD B,(HL)\r
- 00006124 23 3829 INC HL\r
- 00006125 5E 3830 LD E,(HL)\r
- 00006126 23 3831 INC HL\r
- 00006127 56 3832 LD D,(HL)\r
- 00006128 DD 71 FC 3833 LD (IX-4),C\r
- 0000612B DD 70 FD 3834 LD (IX-3),B\r
- 0000612E DD 73 FE 3835 LD (IX-2),E\r
- 00006131 DD 72 FF 3836 LD (IX-1),D\r
- 00006134 DD 5E 02 3837 LD E,(IX+2)\r
- 00006137 DD 56 03 3838 LD D,(IX+3)\r
- 0000613A 3E 00 3839 LD A,BYTE3 root_actionhandler\r
- 0000613C 21 26 63 3840 LD HL,LWRD root_actionhandler\r
- 0000613F CD FB 81 3841 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006142 3842 ?0272:\r
- 00006142 DD 7E D8 3843 LD A,(IX-40)\r
- 00006145 FE 53 3844 CP 83\r
- 00006147 20 71 3845 JR NZ,?0274\r
- 00006149 3846 ?0273:\r
- 00006149 21 0C 00 3847 LD HL,12\r
- 0000614C 39 3848 ADD HL,SP\r
- 0000614D 4D 3849 LD C,L\r
- 0000614E 44 3850 LD B,H\r
- 0000614F DD 5E D4 3851 LD E,(IX-44)\r
- 00006152 DD 56 D5 3852 LD D,(IX-43)\r
- 00006155 3E 00 3853 LD A,BYTE3 read_stringtable\r
- 00006157 21 5E 66 3854 LD HL,LWRD read_stringtable\r
- 0000615A CD FB 81 3855 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000615D 21 26 00 3856 LD HL,38\r
- 00006160 DD 4E 02 3857 LD C,(IX+2)\r
- 00006163 DD 46 03 3858 LD B,(IX+3)\r
- 00006166 09 3859 ADD HL,BC\r
- 00006167 E5 3860 PUSH HL\r
- 00006168 11 04 00 3861 LD DE,4\r
- 0000616B CD 0E 63 3862 CALL LWRD ?0454\r
- 0000616E EB 3863 EX DE,HL\r
- 0000616F E1 3864 POP HL\r
- 00006170 73 3865 LD (HL),E\r
- 00006171 23 3866 INC HL\r
- 00006172 72 3867 LD (HL),D\r
- 00006173 21 26 00 3868 LD HL,38\r
- 00006176 09 3869 ADD HL,BC\r
- 00006177 56 3870 LD D,(HL)\r
- 00006178 DD 72 F5 3871 LD (IX-11),D\r
- 0000617B 23 3872 INC HL\r
- 0000617C 66 3873 LD H,(HL)\r
- 0000617D DD 74 F6 3874 LD (IX-10),H\r
- 00006180 21 24 00 3875 LD HL,36\r
- 00006183 09 3876 ADD HL,BC\r
- 00006184 36 04 3877 LD (HL),4\r
- 00006186 23 3878 INC HL\r
- 00006187 36 00 3879 LD (HL),0\r
- 00006189 6A 3880 LD L,D\r
- 0000618A DD 66 F6 3881 LD H,(IX-10)\r
- 0000618D 23 3882 INC HL\r
- 0000618E 23 3883 INC HL\r
- 0000618F E5 3884 PUSH HL\r
- 00006190 21 08 00 3885 LD HL,8\r
- 00006193 ED 4B 3F 87 3886 LD BC,(global)\r
- 00006197 09 3887 ADD HL,BC\r
- 00006198 5E 3888 LD E,(HL)\r
- 00006199 23 3889 INC HL\r
- 0000619A 56 3890 LD D,(HL)\r
- 0000619B E1 3891 POP HL\r
- 0000619C 73 3892 LD (HL),E\r
- 0000619D 23 3893 INC HL\r
- 0000619E 72 3894 LD (HL),D\r
- 0000619F 21 06 00 3895 LD HL,6\r
- 000061A2 ED 4B 3F 87 3896 LD BC,(global)\r
- 000061A6 09 3897 ADD HL,BC\r
- 000061A7 46 3898 LD B,(HL)\r
- 000061A8 23 3899 INC HL\r
- 000061A9 66 3900 LD H,(HL)\r
- 000061AA 68 3901 LD L,B\r
- 000061AB E5 3902 PUSH HL\r
- 000061AC DD 6E F5 3903 LD L,(IX-11)\r
- 000061AF DD 66 F6 3904 LD H,(IX-10)\r
- 000061B2 C1 3905 POP BC\r
- 000061B3 71 3906 LD (HL),C\r
- 000061B4 23 3907 INC HL\r
- 000061B5 70 3908 LD (HL),B\r
- 000061B6 DD 36 F4 00 3909 LD (IX-12),0\r
- 000061BA 3910 ?0274:\r
- 000061BA AF 3911 XOR A\r
- 000061BB DD B6 F4 3912 OR (IX-12)\r
- 000061BE CA BA 62 3913 JP Z,?0276\r
- 000061C1 3914 ?0275:\r
- 000061C1 DD 7E DE 3915 LD A,(IX-34)\r
- 000061C4 DD B6 DF 3916 OR (IX-33)\r
- 000061C7 28 69 3917 JR Z,?0278\r
- 000061C9 3918 ?0277:\r
- 000061C9 FD CB 0A EE 3919 SET 5,(IY+10)\r
- 000061CD FD 36 24 0B 3920 LD (IY+36),11\r
- 000061D1 FD 36 25 00 3921 LD (IY+37),0\r
- 000061D5 11 0B 00 3922 LD DE,11\r
- 000061D8 CD 0E 63 3923 CALL LWRD ?0454\r
- 000061DB FD 75 26 3924 LD (IY+38),L\r
- 000061DE FD 74 27 3925 LD (IY+39),H\r
- 000061E1 FD 6E 26 3926 LD L,(IY+38)\r
- 000061E4 DD 75 D0 3927 LD (IX-48),L\r
- 000061E7 FD 66 27 3928 LD H,(IY+39)\r
- 000061EA DD 74 D1 3929 LD (IX-47),H\r
- 000061ED 36 26 3930 LD (HL),LOW(root_actionhandler)\r
- 000061EF 23 3931 INC HL\r
- 000061F0 36 63 3932 LD (HL),HIGH(root_actionhandler)\r
- 000061F2 23 3933 INC HL\r
- 000061F3 36 00 3934 LD (HL),BYTE3 root_actionhandler\r
- 000061F5 DD 6E D0 3935 LD L,(IX-48)\r
- 000061F8 DD 66 D1 3936 LD H,(IX-47)\r
- 000061FB 23 3937 INC HL\r
- 000061FC 23 3938 INC HL\r
- 000061FD 23 3939 INC HL\r
- 000061FE DD 4E DE 3940 LD C,(IX-34)\r
- 00006201 71 3941 LD (HL),C\r
- 00006202 DD 46 DF 3942 LD B,(IX-33)\r
- 00006205 23 3943 INC HL\r
- 00006206 70 3944 LD (HL),B\r
- 00006207 21 05 00 3945 LD HL,5\r
- 0000620A DD 4E D0 3946 LD C,(IX-48)\r
- 0000620D DD 46 D1 3947 LD B,(IX-47)\r
- 00006210 09 3948 ADD HL,BC\r
- 00006211 DD 5E E0 3949 LD E,(IX-32)\r
- 00006214 73 3950 LD (HL),E\r
- 00006215 DD 56 E1 3951 LD D,(IX-31)\r
- 00006218 23 3952 INC HL\r
- 00006219 72 3953 LD (HL),D\r
- 0000621A 21 07 00 3954 LD HL,7\r
- 0000621D 09 3955 ADD HL,BC\r
- 0000621E E5 3956 PUSH HL\r
- 0000621F 21 18 00 3957 LD HL,24\r
- 00006222 39 3958 ADD HL,SP\r
- 00006223 5E 3959 LD E,(HL)\r
- 00006224 23 3960 INC HL\r
- 00006225 56 3961 LD D,(HL)\r
- 00006226 23 3962 INC HL\r
- 00006227 4E 3963 LD C,(HL)\r
- 00006228 23 3964 INC HL\r
- 00006229 46 3965 LD B,(HL)\r
- 0000622A E1 3966 POP HL\r
- 0000622B 73 3967 LD (HL),E\r
- 0000622C 23 3968 INC HL\r
- 0000622D 72 3969 LD (HL),D\r
- 0000622E 23 3970 INC HL\r
- 0000622F 71 3971 LD (HL),C\r
- 00006230 23 3972 INC HL\r
- 00006231 70 3973 LD (HL),B\r
- 00006232 3974 ?0278:\r
- 00006232 DD 7E E6 3975 LD A,(IX-26)\r
- 00006235 DD B6 E7 3976 OR (IX-25)\r
- 00006238 28 0C 3977 JR Z,?0280\r
- 0000623A 3978 ?0279:\r
- 0000623A DD 6E E6 3979 LD L,(IX-26)\r
- 0000623D FD 75 0A 3980 LD (IY+10),L\r
- 00006240 DD 66 E7 3981 LD H,(IX-25)\r
- 00006243 FD 74 0B 3982 LD (IY+11),H\r
- 00006246 3983 ?0280:\r
- 00006246 DD 6E E8 3984 LD L,(IX-24)\r
- 00006249 FD 75 0E 3985 LD (IY+14),L\r
- 0000624C DD 66 E9 3986 LD H,(IX-23)\r
- 0000624F FD 74 0F 3987 LD (IY+15),H\r
- 00006252 DD 6E EA 3988 LD L,(IX-22)\r
- 00006255 FD 75 20 3989 LD (IY+32),L\r
- 00006258 DD 7E EB 3990 LD A,(IX-21)\r
- 0000625B E6 0F 3991 AND 15\r
- 0000625D FD 77 21 3992 LD (IY+33),A\r
- 00006260 FD 7E 20 3993 LD A,(IY+32)\r
- 00006263 FD B6 21 3994 OR (IY+33)\r
- 00006266 20 16 3995 JR NZ,?0282\r
- 00006268 3996 ?0281:\r
- 00006268 11 14 00 3997 LD DE,20\r
- 0000626B CD 0E 63 3998 CALL LWRD ?0454\r
- 0000626E FD 75 20 3999 LD (IY+32),L\r
- 00006271 FD 74 21 4000 LD (IY+33),H\r
- 00006274 FD 6E 20 4001 LD L,(IY+32)\r
- 00006277 FD 66 21 4002 LD H,(IY+33)\r
- 0000627A 36 00 4003 LD (HL),0\r
- 0000627C 18 04 4004 JR ?0283\r
- 0000627E 4005 ?0282:\r
- 0000627E FD CB 0B F6 4006 SET 6,(IY+11)\r
- 00006282 4007 ?0283:\r
- 00006282 DD 7E EB 4008 LD A,(IX-21)\r
- 00006285 2E 00 4009 LD L,0\r
- 00006287 4D 4010 LD C,L\r
- 00006288 E6 F0 4011 AND 240\r
- 0000628A 47 4012 LD B,A\r
- 0000628B 26 10 4013 LD H,16\r
- 0000628D ED 42 4014 SBC HL,BC\r
- 0000628F 30 10 4015 JR NC,?0285\r
- 00006291 4016 ?0284:\r
- 00006291 DD 6E EA 4017 LD L,(IX-22)\r
- 00006294 DD 7E EB 4018 LD A,(IX-21)\r
- 00006297 E6 0F 4019 AND 15\r
- 00006299 67 4020 LD H,A\r
- 0000629A 23 4021 INC HL\r
- 0000629B FD 75 22 4022 LD (IY+34),L\r
- 0000629E FD 74 23 4023 LD (IY+35),H\r
- 000062A1 4024 ?0285:\r
- 000062A1 FD E5 4025 PUSH IY\r
- 000062A3 DD 5E 02 4026 LD E,(IX+2)\r
- 000062A6 4B 4027 LD C,E\r
- 000062A7 DD 56 03 4028 LD D,(IX+3)\r
- 000062AA 42 4029 LD B,D\r
- 000062AB 21 1D 00 4030 LD HL,29\r
- 000062AE 09 4031 ADD HL,BC\r
- 000062AF 4E 4032 LD C,(HL)\r
- 000062B0 23 4033 INC HL\r
- 000062B1 46 4034 LD B,(HL)\r
- 000062B2 23 4035 INC HL\r
- 000062B3 7E 4036 LD A,(HL)\r
- 000062B4 69 4037 LD L,C\r
- 000062B5 60 4038 LD H,B\r
- 000062B6 C1 4039 POP BC\r
- 000062B7 CD FB 81 4040 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000062BA 4041 ?0276:\r
- 000062BA 21 14 00 4042 LD HL,20\r
- 000062BD E5 4043 PUSH HL\r
- 000062BE 2E 0E 4044 LD L,14\r
- 000062C0 39 4045 ADD HL,SP\r
- 000062C1 4D 4046 LD C,L\r
- 000062C2 44 4047 LD B,H\r
- 000062C3 DD 5E D4 4048 LD E,(IX-44)\r
- 000062C6 DD 56 D5 4049 LD D,(IX-43)\r
- 000062C9 CD 06 63 4050 CALL LWRD ?0441\r
- 000062CC F1 4051 POP AF\r
- 000062CD 3E 14 4052 LD A,20\r
- 000062CF AD 4053 XOR L\r
- 000062D0 B4 4054 OR H\r
- 000062D1 CA 86 5F 4055 JP Z,?0256\r
- 000062D4 4056 ?0254:\r
- 000062D4 DD 5E D4 4057 LD E,(IX-44)\r
- 000062D7 DD 56 D5 4058 LD D,(IX-43)\r
- 000062DA 3E 00 4059 LD A,BYTE3 close\r
- 000062DC 21 96 73 4060 LD HL,LWRD close\r
- 000062DF CD FB 81 4061 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000062E2 DD 5E 02 4062 LD E,(IX+2)\r
- 000062E5 DD 56 03 4063 LD D,(IX+3)\r
- 000062E8 3E 00 4064 LD A,BYTE3 Component_linkstringtable\r
- 000062EA 21 67 50 4065 LD HL,LWRD Component_linkstringtable\r
- 000062ED CD FB 81 4066 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000062F0 DD 5E 02 4067 LD E,(IX+2)\r
- 000062F3 4B 4068 LD C,E\r
- 000062F4 DD 56 03 4069 LD D,(IX+3)\r
- 000062F7 42 4070 LD B,D\r
- 000062F8 21 1A 00 4071 LD HL,26\r
- 000062FB 09 4072 ADD HL,BC\r
- 000062FC 4E 4073 LD C,(HL)\r
- 000062FD 23 4074 INC HL\r
- 000062FE 46 4075 LD B,(HL)\r
- 000062FF 23 4076 INC HL\r
- 00006300 7E 4077 LD A,(HL)\r
- 00006301 69 4078 LD L,C\r
- 00006302 60 4079 LD H,B\r
- 00006303 C3 67 57 4080 JP LWRD ?0424\r
- 00006306 4081 ?0441:\r
- 00006306 3E 01 4082 LD A,BYTE3 _read\r
- 00006308 21 5C 42 4083 LD HL,LWRD _read\r
- 0000630B C3 FB 81 4084 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 0000630E 4085 ?0454:\r
- 0000630E 3E 01 4086 LD A,BYTE3 malloc\r
- 00006310 21 00 40 4087 LD HL,LWRD malloc\r
- 00006313 C3 FB 81 4088 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00006316 4089 ?0482:\r
- 00006316 DD 4E DC 4090 LD C,(IX-36)\r
- 00006319 DD 5E F2 4091 LD E,(IX-14)\r
- 0000631C DD 56 F3 4092 LD D,(IX-13)\r
- 0000631F 4093 ?0483:\r
- 0000631F CD AE 81 4094 CALL LWRD ?S_MUL_L02\r
- 00006322 1B 4095 DEC DE\r
- 00006323 1B 4096 DEC DE\r
- 00006324 1B 4097 DEC DE\r
- 00006325 C9 4098 RET\r
- 00006326 4099 root_actionhandler:\r
- 00006326 CD 7A 82 4100 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00006329 EA FF 4101 DEFW 65514\r
- 0000632B FD E5 4102 PUSH IY\r
- 0000632D DD 6E 02 4103 LD L,(IX+2)\r
- 00006330 DD 66 03 4104 LD H,(IX+3)\r
- 00006333 E5 4105 PUSH HL\r
- 00006334 FD E1 4106 POP IY\r
- 00006336 21 06 00 4107 LD HL,6\r
- 00006339 39 4108 ADD HL,SP\r
- 0000633A EB 4109 EX DE,HL\r
- 0000633B 21 D5 84 4110 LD HL,?0286\r
- 0000633E 01 0E 00 4111 LD BC,14\r
- 00006341 ED B0 4112 LDIR\r
- 00006343 FD 6E 26 4113 LD L,(IY+38)\r
- 00006346 DD 75 EA 4114 LD (IX-22),L\r
- 00006349 FD 66 27 4115 LD H,(IY+39)\r
- 0000634C DD 74 EB 4116 LD (IX-21),H\r
- 0000634F 23 4117 INC HL\r
- 00006350 23 4118 INC HL\r
- 00006351 23 4119 INC HL\r
- 00006352 3E 01 4120 LD A,1\r
- 00006354 AE 4121 XOR (HL)\r
- 00006355 23 4122 INC HL\r
- 00006356 B6 4123 OR (HL)\r
- 00006357 20 08 4124 JR NZ,?0288\r
- 00006359 4125 ?0287:\r
- 00006359 C5 4126 PUSH BC\r
- 0000635A 01 01 04 4127 LD BC,1025\r
- 0000635D CD BE 53 4128 CALL LWRD ?0463\r
- 00006360 E1 4129 POP HL\r
- 00006361 4130 ?0288:\r
- 00006361 DD 6E EA 4131 LD L,(IX-22)\r
- 00006364 DD 66 EB 4132 LD H,(IX-21)\r
- 00006367 23 4133 INC HL\r
- 00006368 23 4134 INC HL\r
- 00006369 23 4135 INC HL\r
- 0000636A 46 4136 LD B,(HL)\r
- 0000636B 23 4137 INC HL\r
- 0000636C 66 4138 LD H,(HL)\r
- 0000636D 68 4139 LD L,B\r
- 0000636E CB 85 4140 RES 0,L\r
- 00006370 3E 02 4141 LD A,2\r
- 00006372 AD 4142 XOR L\r
- 00006373 B4 4143 OR H\r
- 00006374 C2 91 64 4144 JP NZ,?0290\r
- 00006377 4145 ?0289:\r
- 00006377 6F 4146 LD L,A\r
- 00006378 67 4147 LD H,A\r
- 00006379 E5 4148 PUSH HL\r
- 0000637A E5 4149 PUSH HL\r
- 0000637B 01 01 00 4150 LD BC,1\r
- 0000637E FD 5E 11 4151 LD E,(IY+17)\r
- 00006381 FD 56 12 4152 LD D,(IY+18)\r
- 00006384 3E 00 4153 LD A,BYTE3 Component_changestate_children\r
- 00006386 21 FE 4F 4154 LD HL,LWRD Component_changestate_children\r
- 00006389 CD FB 81 4155 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000638C E1 4156 POP HL\r
- 0000638D E1 4157 POP HL\r
- 0000638E FD 6E 11 4158 LD L,(IY+17)\r
- 00006391 FD 66 12 4159 LD H,(IY+18)\r
- 00006394 01 08 00 4160 LD BC,8\r
- 00006397 09 4161 ADD HL,BC\r
- 00006398 4E 4162 LD C,(HL)\r
- 00006399 23 4163 INC HL\r
- 0000639A 46 4164 LD B,(HL)\r
- 0000639B C5 4165 PUSH BC\r
- 0000639C FD 6E 11 4166 LD L,(IY+17)\r
- 0000639F FD 66 12 4167 LD H,(IY+18)\r
- 000063A2 01 06 00 4168 LD BC,6\r
- 000063A5 09 4169 ADD HL,BC\r
- 000063A6 4E 4170 LD C,(HL)\r
- 000063A7 23 4171 INC HL\r
- 000063A8 46 4172 LD B,(HL)\r
- 000063A9 C5 4173 PUSH BC\r
- 000063AA 01 00 00 4174 LD BC,0\r
- 000063AD 59 4175 LD E,C\r
- 000063AE 50 4176 LD D,B\r
- 000063AF 3E 00 4177 LD A,BYTE3 Window_new\r
- 000063B1 21 B9 55 4178 LD HL,LWRD Window_new\r
- 000063B4 CD FB 81 4179 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000063B7 F1 4180 POP AF\r
- 000063B8 F1 4181 POP AF\r
- 000063B9 DD 75 EC 4182 LD (IX-20),L\r
- 000063BC DD 74 ED 4183 LD (IX-19),H\r
- 000063BF 01 0A 00 4184 LD BC,10\r
- 000063C2 09 4185 ADD HL,BC\r
- 000063C3 36 03 4186 LD (HL),3\r
- 000063C5 23 4187 INC HL\r
- 000063C6 70 4188 LD (HL),B\r
- 000063C7 DD 6E EA 4189 LD L,(IX-22)\r
- 000063CA DD 66 EB 4190 LD H,(IX-21)\r
- 000063CD 23 4191 INC HL\r
- 000063CE 23 4192 INC HL\r
- 000063CF 23 4193 INC HL\r
- 000063D0 CB 46 4194 BIT 0,(HL)\r
- 000063D2 28 0C 4195 JR Z,?0292\r
- 000063D4 4196 ?0291:\r
- 000063D4 69 4197 LD L,C\r
- 000063D5 60 4198 LD H,B\r
- 000063D6 DD 4E EC 4199 LD C,(IX-20)\r
- 000063D9 DD 46 ED 4200 LD B,(IX-19)\r
- 000063DC 09 4201 ADD HL,BC\r
- 000063DD 23 4202 INC HL\r
- 000063DE CB EE 4203 SET 5,(HL)\r
- 000063E0 4204 ?0292:\r
- 000063E0 21 17 00 4205 LD HL,23\r
- 000063E3 DD 4E EC 4206 LD C,(IX-20)\r
- 000063E6 DD 46 ED 4207 LD B,(IX-19)\r
- 000063E9 09 4208 ADD HL,BC\r
- 000063EA 36 38 4209 LD (HL),LOW(rootWindow_handler)\r
- 000063EC 23 4210 INC HL\r
- 000063ED 36 5F 4211 LD (HL),HIGH(rootWindow_handler)\r
- 000063EF 23 4212 INC HL\r
- 000063F0 36 00 4213 LD (HL),BYTE3 rootWindow_handler\r
- 000063F2 21 1A 00 4214 LD HL,26\r
- 000063F5 09 4215 ADD HL,BC\r
- 000063F6 36 74 4216 LD (HL),LOW(Root_paint)\r
- 000063F8 23 4217 INC HL\r
- 000063F9 36 55 4218 LD (HL),HIGH(Root_paint)\r
- 000063FB 23 4219 INC HL\r
- 000063FC 36 00 4220 LD (HL),BYTE3 Root_paint\r
- 000063FE 21 07 00 4221 LD HL,7\r
- 00006401 DD 5E EA 4222 LD E,(IX-22)\r
- 00006404 DD 56 EB 4223 LD D,(IX-21)\r
- 00006407 19 4224 ADD HL,DE\r
- 00006408 5E 4225 LD E,(HL)\r
- 00006409 EB 4226 EX DE,HL\r
- 0000640A DD 75 F3 4227 LD (IX-13),L\r
- 0000640D 21 07 00 4228 LD HL,7\r
- 00006410 DD 4E EA 4229 LD C,(IX-22)\r
- 00006413 DD 46 EB 4230 LD B,(IX-21)\r
- 00006416 09 4231 ADD HL,BC\r
- 00006417 5E 4232 LD E,(HL)\r
- 00006418 23 4233 INC HL\r
- 00006419 56 4234 LD D,(HL)\r
- 0000641A 23 4235 INC HL\r
- 0000641B 4E 4236 LD C,(HL)\r
- 0000641C 23 4237 INC HL\r
- 0000641D 46 4238 LD B,(HL)\r
- 0000641E EB 4239 EX DE,HL\r
- 0000641F 3E 08 4240 LD A,8\r
- 00006421 CD 15 83 4241 CALL LWRD ?SL_RSH_L03\r
- 00006424 DD 75 F4 4242 LD (IX-12),L\r
- 00006427 21 07 00 4243 LD HL,7\r
- 0000642A DD 4E EA 4244 LD C,(IX-22)\r
- 0000642D DD 46 EB 4245 LD B,(IX-21)\r
- 00006430 09 4246 ADD HL,BC\r
- 00006431 5E 4247 LD E,(HL)\r
- 00006432 23 4248 INC HL\r
- 00006433 56 4249 LD D,(HL)\r
- 00006434 23 4250 INC HL\r
- 00006435 4E 4251 LD C,(HL)\r
- 00006436 23 4252 INC HL\r
- 00006437 46 4253 LD B,(HL)\r
- 00006438 EB 4254 EX DE,HL\r
- 00006439 3E 10 4255 LD A,16\r
- 0000643B CD 15 83 4256 CALL LWRD ?SL_RSH_L03\r
- 0000643E DD 75 F5 4257 LD (IX-11),L\r
- 00006441 21 07 00 4258 LD HL,7\r
- 00006444 DD 4E EA 4259 LD C,(IX-22)\r
- 00006447 DD 46 EB 4260 LD B,(IX-21)\r
- 0000644A 09 4261 ADD HL,BC\r
- 0000644B 5E 4262 LD E,(HL)\r
- 0000644C 23 4263 INC HL\r
- 0000644D 56 4264 LD D,(HL)\r
- 0000644E 23 4265 INC HL\r
- 0000644F 4E 4266 LD C,(HL)\r
- 00006450 23 4267 INC HL\r
- 00006451 46 4268 LD B,(HL)\r
- 00006452 EB 4269 EX DE,HL\r
- 00006453 3E 18 4270 LD A,24\r
- 00006455 CD 15 83 4271 CALL LWRD ?SL_RSH_L03\r
- 00006458 DD 75 F6 4272 LD (IX-10),L\r
- 0000645B 21 06 00 4273 LD HL,6\r
- 0000645E 39 4274 ADD HL,SP\r
- 0000645F 4D 4275 LD C,L\r
- 00006460 44 4276 LD B,H\r
- 00006461 DD 5E EC 4277 LD E,(IX-20)\r
- 00006464 DD 56 ED 4278 LD D,(IX-19)\r
- 00006467 3E 00 4279 LD A,BYTE3 screenbuilder\r
- 00006469 21 56 5F 4280 LD HL,LWRD screenbuilder\r
- 0000646C CD FB 81 4281 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000646F DD 4E EC 4282 LD C,(IX-20)\r
- 00006472 DD 46 ED 4283 LD B,(IX-19)\r
- 00006475 C5 4284 PUSH BC\r
- 00006476 FD 5E 11 4285 LD E,(IY+17)\r
- 00006479 FD 56 12 4286 LD D,(IY+18)\r
- 0000647C FD 6E 11 4287 LD L,(IY+17)\r
- 0000647F FD 66 12 4288 LD H,(IY+18)\r
- 00006482 01 1D 00 4289 LD BC,29\r
- 00006485 09 4290 ADD HL,BC\r
- 00006486 4E 4291 LD C,(HL)\r
- 00006487 23 4292 INC HL\r
- 00006488 46 4293 LD B,(HL)\r
- 00006489 23 4294 INC HL\r
- 0000648A 7E 4295 LD A,(HL)\r
- 0000648B 69 4296 LD L,C\r
- 0000648C 60 4297 LD H,B\r
- 0000648D C1 4298 POP BC\r
- 0000648E CD FB 81 4299 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006491 4300 ?0290:\r
- 00006491 DD 6E EA 4301 LD L,(IX-22)\r
- 00006494 DD 66 EB 4302 LD H,(IX-21)\r
- 00006497 23 4303 INC HL\r
- 00006498 23 4304 INC HL\r
- 00006499 23 4305 INC HL\r
- 0000649A 3E 04 4306 LD A,4\r
- 0000649C AE 4307 XOR (HL)\r
- 0000649D 23 4308 INC HL\r
- 0000649E B6 4309 OR (HL)\r
- 0000649F C2 2F 66 4310 JP NZ,?0294\r
- 000064A2 4311 ?0293:\r
- 000064A2 21 01 00 4312 LD HL,1\r
- 000064A5 E5 4313 PUSH HL\r
- 000064A6 FD 6E 11 4314 LD L,(IY+17)\r
- 000064A9 FD 66 12 4315 LD H,(IY+18)\r
- 000064AC 01 08 00 4316 LD BC,8\r
- 000064AF 09 4317 ADD HL,BC\r
- 000064B0 46 4318 LD B,(HL)\r
- 000064B1 23 4319 INC HL\r
- 000064B2 66 4320 LD H,(HL)\r
- 000064B3 68 4321 LD L,B\r
- 000064B4 01 F6 FF 4322 LD BC,65526\r
- 000064B7 09 4323 ADD HL,BC\r
- 000064B8 E5 4324 PUSH HL\r
- 000064B9 FD 6E 11 4325 LD L,(IY+17)\r
- 000064BC FD 66 12 4326 LD H,(IY+18)\r
- 000064BF 01 06 00 4327 LD BC,6\r
- 000064C2 09 4328 ADD HL,BC\r
- 000064C3 46 4329 LD B,(HL)\r
- 000064C4 23 4330 INC HL\r
- 000064C5 66 4331 LD H,(HL)\r
- 000064C6 68 4332 LD L,B\r
- 000064C7 01 F6 FF 4333 LD BC,65526\r
- 000064CA 09 4334 ADD HL,BC\r
- 000064CB E5 4335 PUSH HL\r
- 000064CC 01 05 00 4336 LD BC,5\r
- 000064CF 59 4337 LD E,C\r
- 000064D0 50 4338 LD D,B\r
- 000064D1 3E 00 4339 LD A,BYTE3 Dialog_new\r
- 000064D3 21 62 5B 4340 LD HL,LWRD Dialog_new\r
- 000064D6 CD FB 81 4341 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000064D9 F1 4342 POP AF\r
- 000064DA F1 4343 POP AF\r
- 000064DB F1 4344 POP AF\r
- 000064DC DD 75 EC 4345 LD (IX-20),L\r
- 000064DF DD 74 ED 4346 LD (IX-19),H\r
- 000064E2 01 0A 00 4347 LD BC,10\r
- 000064E5 09 4348 ADD HL,BC\r
- 000064E6 36 03 4349 LD (HL),3\r
- 000064E8 23 4350 INC HL\r
- 000064E9 36 10 4351 LD (HL),16\r
- 000064EB 21 0E 00 4352 LD HL,14\r
- 000064EE DD 4E EC 4353 LD C,(IX-20)\r
- 000064F1 DD 46 ED 4354 LD B,(IX-19)\r
- 000064F4 09 4355 ADD HL,BC\r
- 000064F5 36 30 4356 LD (HL),48\r
- 000064F7 23 4357 INC HL\r
- 000064F8 36 00 4358 LD (HL),0\r
- 000064FA AF 4359 XOR A\r
- 000064FB DD 77 FE 4360 LD (IX-2),A\r
- 000064FE DD 77 FF 4361 LD (IX-1),A\r
- 00006501 4362 ?0296:\r
- 00006501 21 05 00 4363 LD HL,5\r
- 00006504 DD 4E EA 4364 LD C,(IX-22)\r
- 00006507 DD 46 EB 4365 LD B,(IX-21)\r
- 0000650A 09 4366 ADD HL,BC\r
- 0000650B 5E 4367 LD E,(HL)\r
- 0000650C 23 4368 INC HL\r
- 0000650D 56 4369 LD D,(HL)\r
- 0000650E 06 0C 4370 LD B,12\r
- 00006510 CD 87 83 4371 CALL LWRD ?SS_RSH_L02\r
- 00006513 4B 4372 LD C,E\r
- 00006514 42 4373 LD B,D\r
- 00006515 DD 6E FE 4374 LD L,(IX-2)\r
- 00006518 DD 66 FF 4375 LD H,(IX-1)\r
- 0000651B CD C8 82 4376 CALL LWRD ?SS_CMP_L02\r
- 0000651E 30 04 4377 JR NC,?0367\r
- 00006520 3E 01 4378 LD A,1\r
- 00006522 18 01 4379 JR ?0368\r
- 00006524 4380 ?0367:\r
- 00006524 AF 4381 XOR A\r
- 00006525 4382 ?0368:\r
- 00006525 E6 0F 4383 AND 15\r
- 00006527 CA C3 65 4384 JP Z,?0295\r
- 0000652A 4385 ?0297:\r
- 0000652A 21 05 00 4386 LD HL,5\r
- 0000652D DD 4E EA 4387 LD C,(IX-22)\r
- 00006530 DD 46 EB 4388 LD B,(IX-21)\r
- 00006533 09 4389 ADD HL,BC\r
- 00006534 46 4390 LD B,(HL)\r
- 00006535 23 4391 INC HL\r
- 00006536 7E 4392 LD A,(HL)\r
- 00006537 68 4393 LD L,B\r
- 00006538 E6 0F 4394 AND 15\r
- 0000653A 67 4395 LD H,A\r
- 0000653B DD 4E FE 4396 LD C,(IX-2)\r
- 0000653E DD 46 FF 4397 LD B,(IX-1)\r
- 00006541 09 4398 ADD HL,BC\r
- 00006542 29 4399 ADD HL,HL\r
- 00006543 E5 4400 PUSH HL\r
- 00006544 21 08 00 4401 LD HL,8\r
- 00006547 ED 5B 3F 87 4402 LD DE,(global)\r
- 0000654B 19 4403 ADD HL,DE\r
- 0000654C 5E 4404 LD E,(HL)\r
- 0000654D 23 4405 INC HL\r
- 0000654E 56 4406 LD D,(HL)\r
- 0000654F E1 4407 POP HL\r
- 00006550 19 4408 ADD HL,DE\r
- 00006551 2B 4409 DEC HL\r
- 00006552 2B 4410 DEC HL\r
- 00006553 5E 4411 LD E,(HL)\r
- 00006554 23 4412 INC HL\r
- 00006555 56 4413 LD D,(HL)\r
- 00006556 D5 4414 PUSH DE\r
- 00006557 21 10 00 4415 LD HL,16\r
- 0000655A E5 4416 PUSH HL\r
- 0000655B 2E 06 4417 LD L,6\r
- 0000655D DD 5E EC 4418 LD E,(IX-20)\r
- 00006560 DD 56 ED 4419 LD D,(IX-19)\r
- 00006563 19 4420 ADD HL,DE\r
- 00006564 6E 4421 LD L,(HL)\r
- 00006565 26 00 4422 LD H,0\r
- 00006567 01 F0 FF 4423 LD BC,65520\r
- 0000656A 09 4424 ADD HL,BC\r
- 0000656B E5 4425 PUSH HL\r
- 0000656C DD 6E FE 4426 LD L,(IX-2)\r
- 0000656F DD 66 FF 4427 LD H,(IX-1)\r
- 00006572 29 4428 ADD HL,HL\r
- 00006573 29 4429 ADD HL,HL\r
- 00006574 4D 4430 LD C,L\r
- 00006575 44 4431 LD B,H\r
- 00006576 29 4432 ADD HL,HL\r
- 00006577 09 4433 ADD HL,BC\r
- 00006578 01 14 00 4434 LD BC,20\r
- 0000657B 09 4435 ADD HL,BC\r
- 0000657C 4D 4436 LD C,L\r
- 0000657D 44 4437 LD B,H\r
- 0000657E 11 08 00 4438 LD DE,8\r
- 00006581 3E 00 4439 LD A,BYTE3 Label_new\r
- 00006583 21 DF 5E 4440 LD HL,LWRD Label_new\r
- 00006586 CD FB 81 4441 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006589 F1 4442 POP AF\r
- 0000658A F1 4443 POP AF\r
- 0000658B F1 4444 POP AF\r
- 0000658C DD 75 FC 4445 LD (IX-4),L\r
- 0000658F DD 74 FD 4446 LD (IX-3),H\r
- 00006592 01 0E 00 4447 LD BC,14\r
- 00006595 09 4448 ADD HL,BC\r
- 00006596 36 30 4449 LD (HL),48\r
- 00006598 23 4450 INC HL\r
- 00006599 70 4451 LD (HL),B\r
- 0000659A DD 4E FC 4452 LD C,(IX-4)\r
- 0000659D DD 46 FD 4453 LD B,(IX-3)\r
- 000065A0 C5 4454 PUSH BC\r
- 000065A1 DD 5E EC 4455 LD E,(IX-20)\r
- 000065A4 4B 4456 LD C,E\r
- 000065A5 DD 56 ED 4457 LD D,(IX-19)\r
- 000065A8 42 4458 LD B,D\r
- 000065A9 21 1D 00 4459 LD HL,29\r
- 000065AC 09 4460 ADD HL,BC\r
- 000065AD 4E 4461 LD C,(HL)\r
- 000065AE 23 4462 INC HL\r
- 000065AF 46 4463 LD B,(HL)\r
- 000065B0 23 4464 INC HL\r
- 000065B1 7E 4465 LD A,(HL)\r
- 000065B2 69 4466 LD L,C\r
- 000065B3 60 4467 LD H,B\r
- 000065B4 C1 4468 POP BC\r
- 000065B5 CD FB 81 4469 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000065B8 DD 34 FE 4470 INC (IX-2)\r
- 000065BB 20 03 4471 JR NZ,?0369\r
- 000065BD DD 34 FF 4472 INC (IX-1)\r
- 000065C0 4473 ?0369:\r
- 000065C0 C3 01 65 4474 JP LWRD ?0296\r
- 000065C3 4475 ?0295:\r
- 000065C3 01 F8 84 4476 LD BC,?0299\r
- 000065C6 DD 5E EC 4477 LD E,(IX-20)\r
- 000065C9 DD 56 ED 4478 LD D,(IX-19)\r
- 000065CC 3E 00 4479 LD A,BYTE3 Component_setlabel\r
- 000065CE 21 A1 4C 4480 LD HL,LWRD Component_setlabel\r
- 000065D1 CD FB 81 4481 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000065D4 01 FF 00 4482 LD BC,255\r
- 000065D7 CD 50 66 4483 CALL LWRD ?0476\r
- 000065DA 01 0E 00 4484 LD BC,14\r
- 000065DD 09 4485 ADD HL,BC\r
- 000065DE 36 30 4486 LD (HL),48\r
- 000065E0 23 4487 INC HL\r
- 000065E1 70 4488 LD (HL),B\r
- 000065E2 0E FE 4489 LD C,254\r
- 000065E4 CD 50 66 4490 CALL LWRD ?0476\r
- 000065E7 EB 4491 EX DE,HL\r
- 000065E8 CD D7 4F 4492 CALL LWRD ?0453\r
- 000065EB DD 4E EC 4493 LD C,(IX-20)\r
- 000065EE DD 46 ED 4494 LD B,(IX-19)\r
- 000065F1 C5 4495 PUSH BC\r
- 000065F2 FD 5E 11 4496 LD E,(IY+17)\r
- 000065F5 FD 56 12 4497 LD D,(IY+18)\r
- 000065F8 FD 6E 11 4498 LD L,(IY+17)\r
- 000065FB FD 66 12 4499 LD H,(IY+18)\r
- 000065FE 01 1D 00 4500 LD BC,29\r
- 00006601 09 4501 ADD HL,BC\r
- 00006602 4E 4502 LD C,(HL)\r
- 00006603 23 4503 INC HL\r
- 00006604 46 4504 LD B,(HL)\r
- 00006605 23 4505 INC HL\r
- 00006606 7E 4506 LD A,(HL)\r
- 00006607 69 4507 LD L,C\r
- 00006608 60 4508 LD H,B\r
- 00006609 C1 4509 POP BC\r
- 0000660A CD FB 81 4510 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000660D 21 00 00 4511 LD HL,0\r
- 00006610 E5 4512 PUSH HL\r
- 00006611 FD 5E 11 4513 LD E,(IY+17)\r
- 00006614 FD 56 12 4514 LD D,(IY+18)\r
- 00006617 FD 6E 11 4515 LD L,(IY+17)\r
- 0000661A FD 66 12 4516 LD H,(IY+18)\r
- 0000661D 01 17 00 4517 LD BC,23\r
- 00006620 09 4518 ADD HL,BC\r
- 00006621 4E 4519 LD C,(HL)\r
- 00006622 23 4520 INC HL\r
- 00006623 46 4521 LD B,(HL)\r
- 00006624 23 4522 INC HL\r
- 00006625 7E 4523 LD A,(HL)\r
- 00006626 69 4524 LD L,C\r
- 00006627 60 4525 LD H,B\r
- 00006628 01 03 01 4526 LD BC,259\r
- 0000662B CD FB 81 4527 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 0000662E E1 4528 POP HL\r
- 0000662F 4529 ?0294:\r
- 0000662F 21 10 00 4530 LD HL,16\r
- 00006632 ED 4B 3F 87 4531 LD BC,(global)\r
- 00006636 09 4532 ADD HL,BC\r
- 00006637 7E 4533 LD A,(HL)\r
- 00006638 23 4534 INC HL\r
- 00006639 B6 4535 OR (HL)\r
- 0000663A 23 4536 INC HL\r
- 0000663B B6 4537 OR (HL)\r
- 0000663C 28 0D 4538 JR Z,?0301\r
- 0000663E 4539 ?0300:\r
- 0000663E FD E5 4540 PUSH IY\r
- 00006640 D1 4541 POP DE\r
- 00006641 21 10 00 4542 LD HL,16\r
- 00006644 ED 4B 3F 87 4543 LD BC,(global)\r
- 00006648 CD DC 53 4544 CALL LWRD ?0475\r
- 0000664B 4545 ?0301:\r
- 0000664B FD E1 4546 POP IY\r
- 0000664D C3 A3 81 4547 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00006650 4548 ?0476:\r
- 00006650 DD 5E EC 4549 LD E,(IX-20)\r
- 00006653 DD 56 ED 4550 LD D,(IX-19)\r
- 00006656 3E 00 4551 LD A,BYTE3 Component_find\r
- 00006658 21 D6 4D 4552 LD HL,LWRD Component_find\r
- 0000665B C3 FB 81 4553 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 0000665E 4554 read_stringtable:\r
- 0000665E CD 7A 82 4555 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00006661 F8 FF 4556 DEFW -8\r
- 00006663 FD E5 4557 PUSH IY\r
- 00006665 03 4558 INC BC\r
- 00006666 0A 4559 LD A,(BC)\r
- 00006667 DD 77 FE 4560 LD (IX-2),A\r
- 0000666A 03 4561 INC BC\r
- 0000666B 0A 4562 LD A,(BC)\r
- 0000666C DD 77 FF 4563 LD (IX-1),A\r
- 0000666F 03 4564 INC BC\r
- 00006670 69 4565 LD L,C\r
- 00006671 60 4566 LD H,B\r
- 00006672 4E 4567 LD C,(HL)\r
- 00006673 DD 71 FC 4568 LD (IX-4),C\r
- 00006676 23 4569 INC HL\r
- 00006677 46 4570 LD B,(HL)\r
- 00006678 DD 70 FD 4571 LD (IX-3),B\r
- 0000667B DD 6E FE 4572 LD L,(IX-2)\r
- 0000667E 67 4573 LD H,A\r
- 0000667F 29 4574 ADD HL,HL\r
- 00006680 EB 4575 EX DE,HL\r
- 00006681 CD 0E 63 4576 CALL LWRD ?0454\r
- 00006684 DD 75 FA 4577 LD (IX-6),L\r
- 00006687 DD 74 FB 4578 LD (IX-5),H\r
- 0000668A 59 4579 LD E,C\r
- 0000668B 50 4580 LD D,B\r
- 0000668C CD 16 4B 4581 CALL LWRD ?0447\r
- 0000668F C5 4582 PUSH BC\r
- 00006690 4D 4583 LD C,L\r
- 00006691 44 4584 LD B,H\r
- 00006692 DD 5E 02 4585 LD E,(IX+2)\r
- 00006695 DD 56 03 4586 LD D,(IX+3)\r
- 00006698 CD 06 63 4587 CALL LWRD ?0441\r
- 0000669B F1 4588 POP AF\r
- 0000669C 11 00 00 4589 LD DE,0\r
- 0000669F AF 4590 XOR A\r
- 000066A0 DD 77 F8 4591 LD (IX-8),A\r
- 000066A3 DD 77 F9 4592 LD (IX-7),A\r
- 000066A6 4593 ?0303:\r
- 000066A6 DD 4E FC 4594 LD C,(IX-4)\r
- 000066A9 DD 46 FD 4595 LD B,(IX-3)\r
- 000066AC 6B 4596 LD L,E\r
- 000066AD 62 4597 LD H,D\r
- 000066AE CD C8 82 4598 CALL LWRD ?SS_CMP_L02\r
- 000066B1 30 35 4599 JR NC,?0302\r
- 000066B3 CD 24 67 4600 CALL LWRD ?0479\r
- 000066B6 30 30 4601 JR NC,?0302\r
- 000066B8 4602 ?0306:\r
- 000066B8 4603 ?0305:\r
- 000066B8 4604 ?0304:\r
- 000066B8 23 4605 INC HL\r
- 000066B9 DD 75 F8 4606 LD (IX-8),L\r
- 000066BC DD 74 F9 4607 LD (IX-7),H\r
- 000066BF 2B 4608 DEC HL\r
- 000066C0 29 4609 ADD HL,HL\r
- 000066C1 DD 4E FA 4610 LD C,(IX-6)\r
- 000066C4 DD 46 FB 4611 LD B,(IX-5)\r
- 000066C7 09 4612 ADD HL,BC\r
- 000066C8 E5 4613 PUSH HL\r
- 000066C9 FD E5 4614 PUSH IY\r
- 000066CB E1 4615 POP HL\r
- 000066CC 19 4616 ADD HL,DE\r
- 000066CD 4D 4617 LD C,L\r
- 000066CE 44 4618 LD B,H\r
- 000066CF E1 4619 POP HL\r
- 000066D0 71 4620 LD (HL),C\r
- 000066D1 23 4621 INC HL\r
- 000066D2 70 4622 LD (HL),B\r
- 000066D3 4623 ?0308:\r
- 000066D3 FD E5 4624 PUSH IY\r
- 000066D5 E1 4625 POP HL\r
- 000066D6 19 4626 ADD HL,DE\r
- 000066D7 7E 4627 LD A,(HL)\r
- 000066D8 B7 4628 OR A\r
- 000066D9 28 03 4629 JR Z,?0307\r
- 000066DB 4630 ?0309:\r
- 000066DB 13 4631 INC DE\r
- 000066DC 18 F5 4632 JR ?0308\r
- 000066DE 4633 ?0307:\r
- 000066DE 6B 4634 LD L,E\r
- 000066DF 62 4635 LD H,D\r
- 000066E0 13 4636 INC DE\r
- 000066E1 FD E5 4637 PUSH IY\r
- 000066E3 C1 4638 POP BC\r
- 000066E4 09 4639 ADD HL,BC\r
- 000066E5 77 4640 LD (HL),A\r
- 000066E6 18 BE 4641 JR ?0303\r
- 000066E8 4642 ?0302:\r
- 000066E8 CD 24 67 4643 CALL LWRD ?0479\r
- 000066EB 30 13 4644 JR NC,?0311\r
- 000066ED 4645 ?0310:\r
- 000066ED 29 4646 ADD HL,HL\r
- 000066EE DD 4E FA 4647 LD C,(IX-6)\r
- 000066F1 DD 46 FB 4648 LD B,(IX-5)\r
- 000066F4 09 4649 ADD HL,BC\r
- 000066F5 E5 4650 PUSH HL\r
- 000066F6 FD E5 4651 PUSH IY\r
- 000066F8 E1 4652 POP HL\r
- 000066F9 19 4653 ADD HL,DE\r
- 000066FA 4D 4654 LD C,L\r
- 000066FB 44 4655 LD B,H\r
- 000066FC E1 4656 POP HL\r
- 000066FD 71 4657 LD (HL),C\r
- 000066FE 23 4658 INC HL\r
- 000066FF 70 4659 LD (HL),B\r
- 00006700 4660 ?0311:\r
- 00006700 21 06 00 4661 LD HL,6\r
- 00006703 ED 4B 3F 87 4662 LD BC,(global)\r
- 00006707 09 4663 ADD HL,BC\r
- 00006708 FD E5 4664 PUSH IY\r
- 0000670A C1 4665 POP BC\r
- 0000670B 71 4666 LD (HL),C\r
- 0000670C 23 4667 INC HL\r
- 0000670D 70 4668 LD (HL),B\r
- 0000670E 21 08 00 4669 LD HL,8\r
- 00006711 ED 4B 3F 87 4670 LD BC,(global)\r
- 00006715 09 4671 ADD HL,BC\r
- 00006716 DD 4E FA 4672 LD C,(IX-6)\r
- 00006719 71 4673 LD (HL),C\r
- 0000671A DD 46 FB 4674 LD B,(IX-5)\r
- 0000671D 23 4675 INC HL\r
- 0000671E 70 4676 LD (HL),B\r
- 0000671F FD E1 4677 POP IY\r
- 00006721 C3 A3 81 4678 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
- 00006724 4679 ?0479:\r
- 00006724 DD 4E FE 4680 LD C,(IX-2)\r
- 00006727 DD 46 FF 4681 LD B,(IX-1)\r
- 0000672A DD 6E F8 4682 LD L,(IX-8)\r
- 0000672D DD 66 F9 4683 LD H,(IX-7)\r
- 00006730 C3 C8 82 4684 JP LWRD ?SS_CMP_L02\r
- 00006733 4685 gui_globals:\r
- 00006733 2A 3F 87 4686 LD HL,(global)\r
- 00006736 C3 A9 81 4687 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 00006739 4688 GUIinit:\r
- 00006739 C5 4689 PUSH BC\r
- 0000673A D5 4690 PUSH DE\r
- 0000673B 11 13 00 4691 LD DE,19\r
- 0000673E CD 0E 63 4692 CALL LWRD ?0454\r
- 00006741 22 3F 87 4693 LD (global),HL\r
- 00006744 AF 4694 XOR A\r
- 00006745 77 4695 LD (HL),A\r
- 00006746 23 4696 INC HL\r
- 00006747 77 4697 LD (HL),A\r
- 00006748 21 04 00 4698 LD HL,4\r
- 0000674B ED 4B 3F 87 4699 LD BC,(global)\r
- 0000674F 09 4700 ADD HL,BC\r
- 00006750 77 4701 LD (HL),A\r
- 00006751 23 4702 INC HL\r
- 00006752 77 4703 LD (HL),A\r
- 00006753 21 0A 00 4704 LD HL,10\r
- 00006756 ED 4B 3F 87 4705 LD BC,(global)\r
- 0000675A 09 4706 ADD HL,BC\r
- 0000675B 77 4707 LD (HL),A\r
- 0000675C 23 4708 INC HL\r
- 0000675D 77 4709 LD (HL),A\r
- 0000675E 21 0C 00 4710 LD HL,12\r
- 00006761 ED 4B 3F 87 4711 LD BC,(global)\r
- 00006765 09 4712 ADD HL,BC\r
- 00006766 77 4713 LD (HL),A\r
- 00006767 23 4714 INC HL\r
- 00006768 77 4715 LD (HL),A\r
- 00006769 21 08 00 4716 LD HL,8\r
- 0000676C ED 4B 3F 87 4717 LD BC,(global)\r
- 00006770 09 4718 ADD HL,BC\r
- 00006771 77 4719 LD (HL),A\r
- 00006772 23 4720 INC HL\r
- 00006773 77 4721 LD (HL),A\r
- 00006774 21 06 00 4722 LD HL,6\r
- 00006777 ED 4B 3F 87 4723 LD BC,(global)\r
- 0000677B 09 4724 ADD HL,BC\r
- 0000677C 77 4725 LD (HL),A\r
- 0000677D 23 4726 INC HL\r
- 0000677E 77 4727 LD (HL),A\r
- 0000677F 21 10 00 4728 LD HL,16\r
- 00006782 ED 4B 3F 87 4729 LD BC,(global)\r
- 00006786 09 4730 ADD HL,BC\r
- 00006787 77 4731 LD (HL),A\r
- 00006788 23 4732 INC HL\r
- 00006789 77 4733 LD (HL),A\r
- 0000678A 23 4734 INC HL\r
- 0000678B 77 4735 LD (HL),A\r
- 0000678C 3E 00 4736 LD A,BYTE3 GraphicsOpen\r
- 0000678E 21 48 46 4737 LD HL,LWRD GraphicsOpen\r
- 00006791 CD FB 81 4738 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006794 21 00 00 4739 LD HL,0\r
- 00006797 E5 4740 PUSH HL\r
- 00006798 E5 4741 PUSH HL\r
- 00006799 0E 00 4742 LD C,BYTE3 stringheight01\r
- 0000679B C5 4743 PUSH BC\r
- 0000679C 21 B8 4B 4744 LD HL,LWRD stringheight01\r
- 0000679F E5 4745 PUSH HL\r
- 000067A0 0E 00 4746 LD C,BYTE3 stringwidth0\r
- 000067A2 C5 4747 PUSH BC\r
- 000067A3 21 D4 4B 4748 LD HL,LWRD stringwidth0\r
- 000067A6 E5 4749 PUSH HL\r
- 000067A7 11 30 00 4750 LD DE,48\r
- 000067AA CD 58 68 4751 CALL LWRD ?0484\r
- 000067AD 21 0C 00 4752 LD HL,12\r
- 000067B0 39 4753 ADD HL,SP\r
- 000067B1 F9 4754 LD SP,HL\r
- 000067B2 21 00 00 4755 LD HL,0\r
- 000067B5 E5 4756 PUSH HL\r
- 000067B6 E5 4757 PUSH HL\r
- 000067B7 0E 00 4758 LD C,BYTE3 stringheight01\r
- 000067B9 C5 4759 PUSH BC\r
- 000067BA 21 B8 4B 4760 LD HL,LWRD stringheight01\r
- 000067BD E5 4761 PUSH HL\r
- 000067BE 0E 00 4762 LD C,BYTE3 stringwidth1\r
- 000067C0 C5 4763 PUSH BC\r
- 000067C1 21 E5 4B 4764 LD HL,LWRD stringwidth1\r
- 000067C4 E5 4765 PUSH HL\r
- 000067C5 11 31 00 4766 LD DE,49\r
- 000067C8 CD 58 68 4767 CALL LWRD ?0484\r
- 000067CB 21 0C 00 4768 LD HL,12\r
- 000067CE 39 4769 ADD HL,SP\r
- 000067CF F9 4770 LD SP,HL\r
- 000067D0 21 00 00 4771 LD HL,0\r
- 000067D3 E5 4772 PUSH HL\r
- 000067D4 E5 4773 PUSH HL\r
- 000067D5 0E 00 4774 LD C,BYTE3 stringheight2\r
- 000067D7 C5 4775 PUSH BC\r
- 000067D8 21 CB 4B 4776 LD HL,LWRD stringheight2\r
- 000067DB E5 4777 PUSH HL\r
- 000067DC 0E 00 4778 LD C,BYTE3 stringwidth2\r
- 000067DE C5 4779 PUSH BC\r
- 000067DF 21 EE 4B 4780 LD HL,LWRD stringwidth2\r
- 000067E2 E5 4781 PUSH HL\r
- 000067E3 11 32 00 4782 LD DE,50\r
- 000067E6 CD 58 68 4783 CALL LWRD ?0484\r
- 000067E9 21 0C 00 4784 LD HL,12\r
- 000067EC 39 4785 ADD HL,SP\r
- 000067ED F9 4786 LD SP,HL\r
- 000067EE 21 0E 00 4787 LD HL,14\r
- 000067F1 ED 4B 3F 87 4788 LD BC,(global)\r
- 000067F5 09 4789 ADD HL,BC\r
- 000067F6 E5 4790 PUSH HL\r
- 000067F7 11 80 00 4791 LD DE,128\r
- 000067FA D5 4792 PUSH DE\r
- 000067FB 5A 4793 LD E,D\r
- 000067FC D5 4794 PUSH DE\r
- 000067FD 4B 4795 LD C,E\r
- 000067FE 42 4796 LD B,D\r
- 000067FF 3E 00 4797 LD A,BYTE3 Window_new\r
- 00006801 21 B9 55 4798 LD HL,LWRD Window_new\r
- 00006804 CD FB 81 4799 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006807 F1 4800 POP AF\r
- 00006808 F1 4801 POP AF\r
- 00006809 4D 4802 LD C,L\r
- 0000680A 44 4803 LD B,H\r
- 0000680B E1 4804 POP HL\r
- 0000680C 71 4805 LD (HL),C\r
- 0000680D 23 4806 INC HL\r
- 0000680E 70 4807 LD (HL),B\r
- 0000680F 21 0E 00 4808 LD HL,14\r
- 00006812 ED 4B 3F 87 4809 LD BC,(global)\r
- 00006816 09 4810 ADD HL,BC\r
- 00006817 56 4811 LD D,(HL)\r
- 00006818 23 4812 INC HL\r
- 00006819 66 4813 LD H,(HL)\r
- 0000681A 6A 4814 LD L,D\r
- 0000681B 11 0A 00 4815 LD DE,10\r
- 0000681E 19 4816 ADD HL,DE\r
- 0000681F 36 01 4817 LD (HL),1\r
- 00006821 23 4818 INC HL\r
- 00006822 72 4819 LD (HL),D\r
- 00006823 21 0E 00 4820 LD HL,14\r
- 00006826 ED 4B 3F 87 4821 LD BC,(global)\r
- 0000682A 09 4822 ADD HL,BC\r
- 0000682B 56 4823 LD D,(HL)\r
- 0000682C 23 4824 INC HL\r
- 0000682D 66 4825 LD H,(HL)\r
- 0000682E 6A 4826 LD L,D\r
- 0000682F 11 17 00 4827 LD DE,23\r
- 00006832 19 4828 ADD HL,DE\r
- 00006833 36 38 4829 LD (HL),LOW(rootWindow_handler)\r
- 00006835 23 4830 INC HL\r
- 00006836 36 5F 4831 LD (HL),HIGH(rootWindow_handler)\r
- 00006838 23 4832 INC HL\r
- 00006839 36 00 4833 LD (HL),BYTE3 rootWindow_handler\r
- 0000683B 21 0E 00 4834 LD HL,14\r
- 0000683E ED 4B 3F 87 4835 LD BC,(global)\r
- 00006842 09 4836 ADD HL,BC\r
- 00006843 46 4837 LD B,(HL)\r
- 00006844 23 4838 INC HL\r
- 00006845 66 4839 LD H,(HL)\r
- 00006846 68 4840 LD L,B\r
- 00006847 01 1A 00 4841 LD BC,26\r
- 0000684A 09 4842 ADD HL,BC\r
- 0000684B 36 74 4843 LD (HL),LOW(Root_paint)\r
- 0000684D 23 4844 INC HL\r
- 0000684E 36 55 4845 LD (HL),HIGH(Root_paint)\r
- 00006850 23 4846 INC HL\r
- 00006851 36 00 4847 LD (HL),BYTE3 Root_paint\r
- 00006853 D1 4848 POP DE\r
- 00006854 C1 4849 POP BC\r
- 00006855 C3 A9 81 4850 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 00006858 4851 ?0484:\r
- 00006858 3E 00 4852 LD A,BYTE3 loadFont\r
- 0000685A 21 7B 4A 4853 LD HL,LWRD loadFont\r
- 0000685D C3 FB 81 4854 JP LWRD ?BANK_CALL_DIRECT_L08\r
- 00006860 4855 GUIunit:\r
- 00006860 C5 4856 PUSH BC\r
- 00006861 D5 4857 PUSH DE\r
- 00006862 21 0E 00 4858 LD HL,14\r
- 00006865 ED 4B 3F 87 4859 LD BC,(global)\r
- 00006869 09 4860 ADD HL,BC\r
- 0000686A 5E 4861 LD E,(HL)\r
- 0000686B 23 4862 INC HL\r
- 0000686C 56 4863 LD D,(HL)\r
- 0000686D CD D7 4F 4864 CALL LWRD ?0453\r
- 00006870 3E 00 4865 LD A,BYTE3 ClearScreen\r
- 00006872 21 05 49 4866 LD HL,LWRD ClearScreen\r
- 00006875 CD FB 81 4867 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006878 3E 00 4868 LD A,BYTE3 GraphicsClose\r
- 0000687A 21 D6 46 4869 LD HL,LWRD GraphicsClose\r
- 0000687D CD FB 81 4870 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006880 D1 4871 POP DE\r
- 00006881 C1 4872 POP BC\r
- 00006882 C3 A9 81 4873 JP LWRD ?BANK_FAST_LEAVE_L08\r
- 00006885 4874 GUIgo:\r
- 00006885 CD 7A 82 4875 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
- 00006888 FE FF 4876 DEFW 65534\r
- 0000688A DD 4E 02 4877 LD C,(IX+2)\r
- 0000688D DD 46 03 4878 LD B,(IX+3)\r
- 00006890 21 0E 00 4879 LD HL,14\r
- 00006893 ED 5B 3F 87 4880 LD DE,(global)\r
- 00006897 19 4881 ADD HL,DE\r
- 00006898 5E 4882 LD E,(HL)\r
- 00006899 23 4883 INC HL\r
- 0000689A 56 4884 LD D,(HL)\r
- 0000689B 3E 00 4885 LD A,BYTE3 screenbuilder\r
- 0000689D 21 56 5F 4886 LD HL,LWRD screenbuilder\r
- 000068A0 CD FB 81 4887 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000068A3 4888 ?0313:\r
- 000068A3 21 04 00 4889 LD HL,4\r
- 000068A6 ED 4B 3F 87 4890 LD BC,(global)\r
- 000068AA 09 4891 ADD HL,BC\r
- 000068AB 7E 4892 LD A,(HL)\r
- 000068AC 23 4893 INC HL\r
- 000068AD B6 4894 OR (HL)\r
- 000068AE C2 43 69 4895 JP NZ,?0312\r
- 000068B1 4896 ?0314:\r
- 000068B1 21 01 00 4897 LD HL,1\r
- 000068B4 E5 4898 PUSH HL\r
- 000068B5 23 4899 INC HL\r
- 000068B6 39 4900 ADD HL,SP\r
- 000068B7 4D 4901 LD C,L\r
- 000068B8 44 4902 LD B,H\r
- 000068B9 2A 3F 87 4903 LD HL,(global)\r
- 000068BC 23 4904 INC HL\r
- 000068BD 23 4905 INC HL\r
- 000068BE 5E 4906 LD E,(HL)\r
- 000068BF 23 4907 INC HL\r
- 000068C0 56 4908 LD D,(HL)\r
- 000068C1 CD 06 63 4909 CALL LWRD ?0441\r
- 000068C4 F1 4910 POP AF\r
- 000068C5 3E 01 4911 LD A,1\r
- 000068C7 AD 4912 XOR L\r
- 000068C8 B4 4913 OR H\r
- 000068C9 20 D8 4914 JR NZ,?0313\r
- 000068CB 4915 ?0315:\r
- 000068CB DD 4E FE 4916 LD C,(IX-2)\r
- 000068CE 47 4917 LD B,A\r
- 000068CF C5 4918 PUSH BC\r
- 000068D0 21 04 85 4919 LD HL,?0317\r
- 000068D3 E5 4920 PUSH HL\r
- 000068D4 3E 00 4921 LD A,BYTE3 printf\r
- 000068D6 21 91 72 4922 LD HL,LWRD printf\r
- 000068D9 CD FB 81 4923 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 000068DC F1 4924 POP AF\r
- 000068DD F1 4925 POP AF\r
- 000068DE AF 4926 XOR A\r
- 000068DF DD B6 FE 4927 OR (IX-2)\r
- 000068E2 28 29 4928 JR Z,?0319\r
- 000068E4 4929 ?0318:\r
- 000068E4 4F 4930 LD C,A\r
- 000068E5 C5 4931 PUSH BC\r
- 000068E6 21 0E 00 4932 LD HL,14\r
- 000068E9 ED 5B 3F 87 4933 LD DE,(global)\r
- 000068ED 19 4934 ADD HL,DE\r
- 000068EE 5E 4935 LD E,(HL)\r
- 000068EF 23 4936 INC HL\r
- 000068F0 56 4937 LD D,(HL)\r
- 000068F1 21 0E 00 4938 LD HL,14\r
- 000068F4 ED 4B 3F 87 4939 LD BC,(global)\r
- 000068F8 09 4940 ADD HL,BC\r
- 000068F9 46 4941 LD B,(HL)\r
- 000068FA 23 4942 INC HL\r
- 000068FB 66 4943 LD H,(HL)\r
- 000068FC 68 4944 LD L,B\r
- 000068FD 01 17 00 4945 LD BC,23\r
- 00006900 09 4946 ADD HL,BC\r
- 00006901 4E 4947 LD C,(HL)\r
- 00006902 23 4948 INC HL\r
- 00006903 46 4949 LD B,(HL)\r
- 00006904 23 4950 INC HL\r
- 00006905 7E 4951 LD A,(HL)\r
- 00006906 69 4952 LD L,C\r
- 00006907 60 4953 LD H,B\r
- 00006908 01 01 00 4954 LD BC,1\r
- 0000690B 18 29 4955 JR ?0370\r
- 0000690D 4956 ?0319:\r
- 0000690D DD 4E FF 4957 LD C,(IX-1)\r
- 00006910 C5 4958 PUSH BC\r
- 00006911 21 0E 00 4959 LD HL,14\r
- 00006914 ED 5B 3F 87 4960 LD DE,(global)\r
- 00006918 19 4961 ADD HL,DE\r
- 00006919 5E 4962 LD E,(HL)\r
- 0000691A 23 4963 INC HL\r
- 0000691B 56 4964 LD D,(HL)\r
- 0000691C 21 0E 00 4965 LD HL,14\r
- 0000691F ED 4B 3F 87 4966 LD BC,(global)\r
- 00006923 09 4967 ADD HL,BC\r
- 00006924 46 4968 LD B,(HL)\r
- 00006925 23 4969 INC HL\r
- 00006926 66 4970 LD H,(HL)\r
- 00006927 68 4971 LD L,B\r
- 00006928 01 17 00 4972 LD BC,23\r
- 0000692B 09 4973 ADD HL,BC\r
- 0000692C 4E 4974 LD C,(HL)\r
- 0000692D 23 4975 INC HL\r
- 0000692E 46 4976 LD B,(HL)\r
- 0000692F 23 4977 INC HL\r
- 00006930 7E 4978 LD A,(HL)\r
- 00006931 69 4979 LD L,C\r
- 00006932 60 4980 LD H,B\r
- 00006933 01 02 00 4981 LD BC,2\r
- 00006936 4982 ?0370:\r
- 00006936 CD FB 81 4983 CALL LWRD ?BANK_CALL_DIRECT_L08\r
- 00006939 E1 4984 POP HL\r
- 0000693A 4985 ?0320:\r
- 0000693A DD 46 FE 4986 LD B,(IX-2)\r
- 0000693D DD 70 FF 4987 LD (IX-1),B\r
- 00006940 4988 ?0316:\r
- 00006940 C3 A3 68 4989 JP LWRD ?0313\r
- 00006943 4990 ?0312:\r
- 00006943 C3 A3 81 4991 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000045C9 94 GraphicsOpen:\r
+ 000045C9 CD 88 81 95 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000045CC F8 FF 96 DEFW 65528\r
+ 000045CE 21 06 00 97 LD HL,6\r
+ 000045D1 39 98 ADD HL,SP\r
+ 000045D2 EB 99 EX DE,HL\r
+ 000045D3 21 81 84 100 LD HL,?0000\r
+ 000045D6 01 02 00 101 LD BC,2\r
+ 000045D9 ED B0 102 LDIR\r
+ 000045DB 2A C0 86 103 LD HL,(global)\r
+ 000045DE 23 104 INC HL\r
+ 000045DF 23 105 INC HL\r
+ 000045E0 E5 106 PUSH HL\r
+ 000045E1 03 107 INC BC\r
+ 000045E2 03 108 INC BC\r
+ 000045E3 C5 109 PUSH BC\r
+ 000045E4 01 B5 84 110 LD BC,?0001\r
+ 000045E7 C5 111 PUSH BC\r
+ 000045E8 3E 01 112 LD A,BYTE3 open\r
+ 000045EA 21 AD 42 113 LD HL,LWRD open\r
+ 000045ED CD 5E 81 114 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000045F0 F1 115 POP AF\r
+ 000045F1 F1 116 POP AF\r
+ 000045F2 4D 117 LD C,L\r
+ 000045F3 44 118 LD B,H\r
+ 000045F4 E1 119 POP HL\r
+ 000045F5 71 120 LD (HL),C\r
+ 000045F6 23 121 INC HL\r
+ 000045F7 70 122 LD (HL),B\r
+ 000045F8 21 00 00 123 LD HL,0\r
+ 000045FB 39 124 ADD HL,SP\r
+ 000045FC E5 125 PUSH HL\r
+ 000045FD 21 00 00 126 LD HL,0\r
+ 00004600 E5 127 PUSH HL\r
+ 00004601 2A C0 86 128 LD HL,(global)\r
+ 00004604 23 129 INC HL\r
+ 00004605 23 130 INC HL\r
+ 00004606 4E 131 LD C,(HL)\r
+ 00004607 23 132 INC HL\r
+ 00004608 46 133 LD B,(HL)\r
+ 00004609 C5 134 PUSH BC\r
+ 0000460A 3E 00 135 LD A,BYTE3 ioctl\r
+ 0000460C 21 68 73 136 LD HL,LWRD ioctl\r
+ 0000460F CD 5E 81 137 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004612 F1 138 POP AF\r
+ 00004613 F1 139 POP AF\r
+ 00004614 F1 140 POP AF\r
+ 00004615 DD 36 FC 60 141 LD (IX-4),96\r
+ 00004619 DD 36 FD 00 142 LD (IX-3),0\r
+ 0000461D 21 00 00 143 LD HL,0\r
+ 00004620 39 144 ADD HL,SP\r
+ 00004621 E5 145 PUSH HL\r
+ 00004622 21 01 00 146 LD HL,1\r
+ 00004625 E5 147 PUSH HL\r
+ 00004626 2A C0 86 148 LD HL,(global)\r
+ 00004629 23 149 INC HL\r
+ 0000462A 23 150 INC HL\r
+ 0000462B 4E 151 LD C,(HL)\r
+ 0000462C 23 152 INC HL\r
+ 0000462D 46 153 LD B,(HL)\r
+ 0000462E C5 154 PUSH BC\r
+ 0000462F 3E 00 155 LD A,BYTE3 ioctl\r
+ 00004631 21 68 73 156 LD HL,LWRD ioctl\r
+ 00004634 CD 5E 81 157 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004637 F1 158 POP AF\r
+ 00004638 F1 159 POP AF\r
+ 00004639 F1 160 POP AF\r
+ 0000463A 21 02 00 161 LD HL,2\r
+ 0000463D E5 162 PUSH HL\r
+ 0000463E 2E 08 163 LD L,8\r
+ 00004640 164 ?0372:\r
+ 00004640 39 165 ADD HL,SP\r
+ 00004641 4D 166 LD C,L\r
+ 00004642 167 ?0427:\r
+ 00004642 44 168 LD B,H\r
+ 00004643 2A C0 86 169 LD HL,(global)\r
+ 00004646 170 ?0428:\r
+ 00004646 23 171 INC HL\r
+ 00004647 23 172 INC HL\r
+ 00004648 173 ?0429:\r
+ 00004648 5E 174 LD E,(HL)\r
+ 00004649 23 175 INC HL\r
+ 0000464A 176 ?0430:\r
+ 0000464A 56 177 LD D,(HL)\r
+ 0000464B 3E 00 178 LD A,BYTE3 _write\r
+ 0000464D 179 ?0431:\r
+ 0000464D 21 D1 6D 180 LD HL,LWRD _write\r
+ 00004650 CD 5E 81 181 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004653 F1 182 POP AF\r
+ 00004654 C3 1F 81 183 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004657 184 GraphicsClose:\r
+ 00004657 D5 185 PUSH DE\r
+ 00004658 2A C0 86 186 LD HL,(global)\r
+ 0000465B 23 187 INC HL\r
+ 0000465C 23 188 INC HL\r
+ 0000465D 5E 189 LD E,(HL)\r
+ 0000465E 23 190 INC HL\r
+ 0000465F 56 191 LD D,(HL)\r
+ 00004660 3E 00 192 LD A,BYTE3 close\r
+ 00004662 21 2B 72 193 LD HL,LWRD close\r
+ 00004665 CD 5E 81 194 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004668 D1 195 POP DE\r
+ 00004669 C3 25 81 196 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 0000466C 197 Move:\r
+ 0000466C CD 88 81 198 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 0000466F FC FF 199 DEFW 65532\r
+ 00004671 21 00 00 200 LD HL,0\r
+ 00004674 39 201 ADD HL,SP\r
+ 00004675 EB 202 EX DE,HL\r
+ 00004676 21 83 84 203 LD HL,?0002\r
+ 00004679 01 04 00 204 LD BC,4\r
+ 0000467C ED B0 205 LDIR\r
+ 0000467E DD 46 02 206 LD B,(IX+2)\r
+ 00004681 DD 70 FE 207 LD (IX-2),B\r
+ 00004684 DD 46 04 208 LD B,(IX+4)\r
+ 00004687 DD 70 FF 209 LD (IX-1),B\r
+ 0000468A 21 04 00 210 LD HL,4\r
+ 0000468D E5 211 PUSH HL\r
+ 0000468E 2B 212 DEC HL\r
+ 0000468F 2B 213 DEC HL\r
+ 00004690 C3 40 46 214 JP LWRD ?0372\r
+ 00004693 4D 215 LD C,L\r
+ 00004694 216 ?0381:\r
+ 00004694 C3 42 46 217 JP LWRD ?0427\r
+ 00004697 2A C0 86 218 LD HL,(global)\r
+ 0000469A 23 219 INC HL\r
+ 0000469B 23 220 INC HL\r
+ 0000469C 221 ?0432:\r
+ 0000469C 5E 222 LD E,(HL)\r
+ 0000469D 23 223 INC HL\r
+ 0000469E 224 ?0433:\r
+ 0000469E 56 225 LD D,(HL)\r
+ 0000469F 3E 00 226 LD A,BYTE3 _write\r
+ 000046A1 227 ?0434:\r
+ 000046A1 C3 4D 46 228 JP LWRD ?0431\r
+ 000046A4 CD 5E 81 229 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000046A7 F1 230 POP AF\r
+ 000046A8 C3 1F 81 231 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000046AB 232 ClearRect:\r
+ 000046AB CD 88 81 233 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000046AE FC FF 234 DEFW 65532\r
+ 000046B0 21 00 00 235 LD HL,0\r
+ 000046B3 39 236 ADD HL,SP\r
+ 000046B4 EB 237 EX DE,HL\r
+ 000046B5 21 87 84 238 LD HL,?0003\r
+ 000046B8 01 04 00 239 LD BC,4\r
+ 000046BB ED B0 240 LDIR\r
+ 000046BD DD 46 02 241 LD B,(IX+2)\r
+ 000046C0 DD 70 FE 242 LD (IX-2),B\r
+ 000046C3 DD 46 04 243 LD B,(IX+4)\r
+ 000046C6 DD 70 FF 244 LD (IX-1),B\r
+ 000046C9 21 04 00 245 LD HL,4\r
+ 000046CC E5 246 PUSH HL\r
+ 000046CD 2B 247 DEC HL\r
+ 000046CE 2B 248 DEC HL\r
+ 000046CF C3 40 46 249 JP LWRD ?0372\r
+ 000046D2 4D 250 LD C,L\r
+ 000046D3 C3 94 46 251 JP LWRD ?0381\r
+ 000046D6 2A C0 86 252 LD HL,(global)\r
+ 000046D9 253 ?0389:\r
+ 000046D9 C3 46 46 254 JP LWRD ?0428\r
+ 000046DC 23 255 INC HL\r
+ 000046DD C3 9C 46 256 JP LWRD ?0432\r
+ 000046E0 23 257 INC HL\r
+ 000046E1 56 258 LD D,(HL)\r
+ 000046E2 3E 00 259 LD A,BYTE3 _write\r
+ 000046E4 260 ?0435:\r
+ 000046E4 C3 4D 46 261 JP LWRD ?0431\r
+ 000046E7 CD 5E 81 262 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000046EA F1 263 POP AF\r
+ 000046EB C3 1F 81 264 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000046EE 265 DrawRectNC:\r
+ 000046EE CD 88 81 266 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000046F1 FC FF 267 DEFW 65532\r
+ 000046F3 21 00 00 268 LD HL,0\r
+ 000046F6 39 269 ADD HL,SP\r
+ 000046F7 EB 270 EX DE,HL\r
+ 000046F8 21 8B 84 271 LD HL,?0004\r
+ 000046FB 01 04 00 272 LD BC,4\r
+ 000046FE ED B0 273 LDIR\r
+ 00004700 DD 46 02 274 LD B,(IX+2)\r
+ 00004703 DD 70 FE 275 LD (IX-2),B\r
+ 00004706 DD 46 04 276 LD B,(IX+4)\r
+ 00004709 DD 70 FF 277 LD (IX-1),B\r
+ 0000470C 21 04 00 278 LD HL,4\r
+ 0000470F E5 279 PUSH HL\r
+ 00004710 2B 280 DEC HL\r
+ 00004711 2B 281 DEC HL\r
+ 00004712 C3 40 46 282 JP LWRD ?0372\r
+ 00004715 4D 283 LD C,L\r
+ 00004716 C3 94 46 284 JP LWRD ?0381\r
+ 00004719 2A C0 86 285 LD HL,(global)\r
+ 0000471C C3 D9 46 286 JP LWRD ?0389\r
+ 0000471F 23 287 INC HL\r
+ 00004720 288 ?0396:\r
+ 00004720 C3 48 46 289 JP LWRD ?0429\r
+ 00004723 23 290 INC HL\r
+ 00004724 C3 9E 46 291 JP LWRD ?0433\r
+ 00004727 3E 00 292 LD A,BYTE3 _write\r
+ 00004729 C3 E4 46 293 JP LWRD ?0435\r
+ 0000472C CD 5E 81 294 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000472F F1 295 POP AF\r
+ 00004730 C3 1F 81 296 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004733 297 FillRect:\r
+ 00004733 CD 88 81 298 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004736 FC FF 299 DEFW 65532\r
+ 00004738 21 00 00 300 LD HL,0\r
+ 0000473B 39 301 ADD HL,SP\r
+ 0000473C EB 302 EX DE,HL\r
+ 0000473D 21 8F 84 303 LD HL,?0005\r
+ 00004740 01 04 00 304 LD BC,4\r
+ 00004743 ED B0 305 LDIR\r
+ 00004745 DD 46 02 306 LD B,(IX+2)\r
+ 00004748 DD 70 FE 307 LD (IX-2),B\r
+ 0000474B DD 46 04 308 LD B,(IX+4)\r
+ 0000474E DD 70 FF 309 LD (IX-1),B\r
+ 00004751 21 04 00 310 LD HL,4\r
+ 00004754 E5 311 PUSH HL\r
+ 00004755 2B 312 DEC HL\r
+ 00004756 2B 313 DEC HL\r
+ 00004757 C3 40 46 314 JP LWRD ?0372\r
+ 0000475A 4D 315 LD C,L\r
+ 0000475B C3 94 46 316 JP LWRD ?0381\r
+ 0000475E 2A C0 86 317 LD HL,(global)\r
+ 00004761 C3 D9 46 318 JP LWRD ?0389\r
+ 00004764 23 319 INC HL\r
+ 00004765 C3 20 47 320 JP LWRD ?0396\r
+ 00004768 23 321 INC HL\r
+ 00004769 322 ?0402:\r
+ 00004769 C3 4A 46 323 JP LWRD ?0430\r
+ 0000476C 3E 00 324 LD A,BYTE3 _write\r
+ 0000476E C3 A1 46 325 JP LWRD ?0434\r
+ 00004771 CD 5E 81 326 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004774 F1 327 POP AF\r
+ 00004775 C3 1F 81 328 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004778 329 FillRectNC:\r
+ 00004778 CD 88 81 330 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 0000477B FC FF 331 DEFW 65532\r
+ 0000477D 21 00 00 332 LD HL,0\r
+ 00004780 39 333 ADD HL,SP\r
+ 00004781 EB 334 EX DE,HL\r
+ 00004782 21 93 84 335 LD HL,?0006\r
+ 00004785 01 04 00 336 LD BC,4\r
+ 00004788 ED B0 337 LDIR\r
+ 0000478A DD 46 02 338 LD B,(IX+2)\r
+ 0000478D DD 70 FE 339 LD (IX-2),B\r
+ 00004790 DD 46 04 340 LD B,(IX+4)\r
+ 00004793 DD 70 FF 341 LD (IX-1),B\r
+ 00004796 21 04 00 342 LD HL,4\r
+ 00004799 E5 343 PUSH HL\r
+ 0000479A 2B 344 DEC HL\r
+ 0000479B 2B 345 DEC HL\r
+ 0000479C C3 40 46 346 JP LWRD ?0372\r
+ 0000479F 4D 347 LD C,L\r
+ 000047A0 C3 94 46 348 JP LWRD ?0381\r
+ 000047A3 2A C0 86 349 LD HL,(global)\r
+ 000047A6 C3 D9 46 350 JP LWRD ?0389\r
+ 000047A9 23 351 INC HL\r
+ 000047AA C3 20 47 352 JP LWRD ?0396\r
+ 000047AD 23 353 INC HL\r
+ 000047AE C3 69 47 354 JP LWRD ?0402\r
+ 000047B1 3E 00 355 LD A,BYTE3 _write\r
+ 000047B3 356 ?0407:\r
+ 000047B3 C3 4D 46 357 JP LWRD ?0431\r
+ 000047B6 CD 5E 81 358 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000047B9 F1 359 POP AF\r
+ 000047BA C3 1F 81 360 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000047BD 361 GrayRect:\r
+ 000047BD CD 88 81 362 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000047C0 FC FF 363 DEFW 65532\r
+ 000047C2 21 00 00 364 LD HL,0\r
+ 000047C5 39 365 ADD HL,SP\r
+ 000047C6 EB 366 EX DE,HL\r
+ 000047C7 21 97 84 367 LD HL,?0007\r
+ 000047CA 01 04 00 368 LD BC,4\r
+ 000047CD ED B0 369 LDIR\r
+ 000047CF DD 46 02 370 LD B,(IX+2)\r
+ 000047D2 DD 70 FE 371 LD (IX-2),B\r
+ 000047D5 DD 46 04 372 LD B,(IX+4)\r
+ 000047D8 DD 70 FF 373 LD (IX-1),B\r
+ 000047DB 21 04 00 374 LD HL,4\r
+ 000047DE E5 375 PUSH HL\r
+ 000047DF 2B 376 DEC HL\r
+ 000047E0 2B 377 DEC HL\r
+ 000047E1 C3 40 46 378 JP LWRD ?0372\r
+ 000047E4 4D 379 LD C,L\r
+ 000047E5 C3 94 46 380 JP LWRD ?0381\r
+ 000047E8 2A C0 86 381 LD HL,(global)\r
+ 000047EB C3 D9 46 382 JP LWRD ?0389\r
+ 000047EE 23 383 INC HL\r
+ 000047EF C3 20 47 384 JP LWRD ?0396\r
+ 000047F2 23 385 INC HL\r
+ 000047F3 C3 69 47 386 JP LWRD ?0402\r
+ 000047F6 3E 00 387 LD A,BYTE3 _write\r
+ 000047F8 C3 B3 47 388 JP LWRD ?0407\r
+ 000047FB CD 5E 81 389 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000047FE F1 390 POP AF\r
+ 000047FF C3 1F 81 391 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004802 392 Text:\r
+ 00004802 C5 393 PUSH BC\r
+ 00004803 FD E5 394 PUSH IY\r
+ 00004805 DD E5 395 PUSH IX\r
+ 00004807 D5 396 PUSH DE\r
+ 00004808 DD E1 397 POP IX\r
+ 0000480A 3E 00 398 LD A,BYTE3 strlen\r
+ 0000480C 21 40 72 399 LD HL,LWRD strlen\r
+ 0000480F CD 5E 81 400 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004812 E5 401 PUSH HL\r
+ 00004813 DD E5 402 PUSH IX\r
+ 00004815 C1 403 POP BC\r
+ 00004816 2A C0 86 404 LD HL,(global)\r
+ 00004819 23 405 INC HL\r
+ 0000481A 23 406 INC HL\r
+ 0000481B 5E 407 LD E,(HL)\r
+ 0000481C 23 408 INC HL\r
+ 0000481D 56 409 LD D,(HL)\r
+ 0000481E 3E 00 410 LD A,BYTE3 _write\r
+ 00004820 21 D1 6D 411 LD HL,LWRD _write\r
+ 00004823 CD 5E 81 412 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004826 F1 413 POP AF\r
+ 00004827 414 ?0411:\r
+ 00004827 DD E1 415 POP IX\r
+ 00004829 FD E1 416 POP IY\r
+ 0000482B C1 417 POP BC\r
+ 0000482C C3 25 81 418 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 0000482F 419 TouchRegion:\r
+ 0000482F CD 88 81 420 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004832 F8 FF 421 DEFW 65528\r
+ 00004834 21 00 00 422 LD HL,0\r
+ 00004837 39 423 ADD HL,SP\r
+ 00004838 EB 424 EX DE,HL\r
+ 00004839 21 9B 84 425 LD HL,?0008\r
+ 0000483C 01 07 00 426 LD BC,7\r
+ 0000483F ED B0 427 LDIR\r
+ 00004841 DD 46 02 428 LD B,(IX+2)\r
+ 00004844 DD 70 FA 429 LD (IX-6),B\r
+ 00004847 DD 46 04 430 LD B,(IX+4)\r
+ 0000484A DD 70 FB 431 LD (IX-5),B\r
+ 0000484D DD 46 0A 432 LD B,(IX+10)\r
+ 00004850 DD 70 FC 433 LD (IX-4),B\r
+ 00004853 DD 46 0C 434 LD B,(IX+12)\r
+ 00004856 DD 70 FD 435 LD (IX-3),B\r
+ 00004859 DD 46 0E 436 LD B,(IX+14)\r
+ 0000485C DD 70 FE 437 LD (IX-2),B\r
+ 0000485F 21 07 00 438 LD HL,7\r
+ 00004862 E5 439 PUSH HL\r
+ 00004863 2E 02 440 LD L,2\r
+ 00004865 C3 40 46 441 JP LWRD ?0372\r
+ 00004868 4D 442 LD C,L\r
+ 00004869 C3 94 46 443 JP LWRD ?0381\r
+ 0000486C 2A C0 86 444 LD HL,(global)\r
+ 0000486F C3 D9 46 445 JP LWRD ?0389\r
+ 00004872 23 446 INC HL\r
+ 00004873 C3 20 47 447 JP LWRD ?0396\r
+ 00004876 23 448 INC HL\r
+ 00004877 C3 69 47 449 JP LWRD ?0402\r
+ 0000487A 3E 00 450 LD A,BYTE3 _write\r
+ 0000487C C3 B3 47 451 JP LWRD ?0407\r
+ 0000487F CD 5E 81 452 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004882 F1 453 POP AF\r
+ 00004883 C3 1F 81 454 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004886 455 ClearScreen:\r
+ 00004886 C5 456 PUSH BC\r
+ 00004887 D5 457 PUSH DE\r
+ 00004888 CD A0 48 458 CALL LWRD ?0461\r
+ 0000488B CD 5E 81 459 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000488E 21 80 00 460 LD HL,128\r
+ 00004891 E5 461 PUSH HL\r
+ 00004892 6C 462 LD L,H\r
+ 00004893 E5 463 PUSH HL\r
+ 00004894 E5 464 PUSH HL\r
+ 00004895 CD B8 48 465 CALL LWRD ?0470\r
+ 00004898 E1 466 POP HL\r
+ 00004899 E1 467 POP HL\r
+ 0000489A E1 468 POP HL\r
+ 0000489B D1 469 POP DE\r
+ 0000489C C1 470 POP BC\r
+ 0000489D C3 25 81 471 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 000048A0 472 ?0461:\r
+ 000048A0 01 00 00 473 LD BC,0\r
+ 000048A3 59 474 LD E,C\r
+ 000048A4 50 475 LD D,B\r
+ 000048A5 3E 00 476 LD A,BYTE3 Move\r
+ 000048A7 21 6C 46 477 LD HL,LWRD Move\r
+ 000048AA CD 5E 81 478 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000048AD 01 80 00 479 LD BC,128\r
+ 000048B0 58 480 LD E,B\r
+ 000048B1 50 481 LD D,B\r
+ 000048B2 3E 00 482 LD A,BYTE3 ClearRect\r
+ 000048B4 21 AB 46 483 LD HL,LWRD ClearRect\r
+ 000048B7 C9 484 RET\r
+ 000048B8 485 ?0470:\r
+ 000048B8 4D 486 LD C,L\r
+ 000048B9 44 487 LD B,H\r
+ 000048BA EB 488 EX DE,HL\r
+ 000048BB 489 ?0471:\r
+ 000048BB 3E 00 490 LD A,BYTE3 TouchRegion\r
+ 000048BD 21 2F 48 491 LD HL,LWRD TouchRegion\r
+ 000048C0 C3 5E 81 492 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 000048C3 493 EnableScreen:\r
+ 000048C3 CD 88 81 494 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000048C6 FC FF 495 DEFW 65532\r
+ 000048C8 21 00 00 496 LD HL,0\r
+ 000048CB 39 497 ADD HL,SP\r
+ 000048CC EB 498 EX DE,HL\r
+ 000048CD 21 A2 84 499 LD HL,?0009\r
+ 000048D0 01 03 00 500 LD BC,3\r
+ 000048D3 ED B0 501 LDIR\r
+ 000048D5 DD 46 02 502 LD B,(IX+2)\r
+ 000048D8 DD 70 FE 503 LD (IX-2),B\r
+ 000048DB 21 03 00 504 LD HL,3\r
+ 000048DE E5 505 PUSH HL\r
+ 000048DF 2B 506 DEC HL\r
+ 000048E0 C3 40 46 507 JP LWRD ?0372\r
+ 000048E3 4D 508 LD C,L\r
+ 000048E4 C3 94 46 509 JP LWRD ?0381\r
+ 000048E7 2A C0 86 510 LD HL,(global)\r
+ 000048EA C3 D9 46 511 JP LWRD ?0389\r
+ 000048ED 23 512 INC HL\r
+ 000048EE C3 20 47 513 JP LWRD ?0396\r
+ 000048F1 23 514 INC HL\r
+ 000048F2 C3 69 47 515 JP LWRD ?0402\r
+ 000048F5 3E 00 516 LD A,BYTE3 _write\r
+ 000048F7 C3 B3 47 517 JP LWRD ?0407\r
+ 000048FA CD 5E 81 518 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000048FD F1 519 POP AF\r
+ 000048FE C3 1F 81 520 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004901 521 grSetFont:\r
+ 00004901 CD 88 81 522 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004904 FE FF 523 DEFW 65534\r
+ 00004906 21 00 00 524 LD HL,0\r
+ 00004909 39 525 ADD HL,SP\r
+ 0000490A EB 526 EX DE,HL\r
+ 0000490B 21 A5 84 527 LD HL,?0010\r
+ 0000490E 01 02 00 528 LD BC,2\r
+ 00004911 ED B0 529 LDIR\r
+ 00004913 DD 46 02 530 LD B,(IX+2)\r
+ 00004916 DD 70 FF 531 LD (IX-1),B\r
+ 00004919 21 02 00 532 LD HL,2\r
+ 0000491C E5 533 PUSH HL\r
+ 0000491D C3 40 46 534 JP LWRD ?0372\r
+ 00004920 4D 535 LD C,L\r
+ 00004921 C3 94 46 536 JP LWRD ?0381\r
+ 00004924 2A C0 86 537 LD HL,(global)\r
+ 00004927 C3 D9 46 538 JP LWRD ?0389\r
+ 0000492A 23 539 INC HL\r
+ 0000492B C3 20 47 540 JP LWRD ?0396\r
+ 0000492E 23 541 INC HL\r
+ 0000492F C3 69 47 542 JP LWRD ?0402\r
+ 00004932 3E 00 543 LD A,BYTE3 _write\r
+ 00004934 C3 B3 47 544 JP LWRD ?0407\r
+ 00004937 CD 5E 81 545 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000493A F1 546 POP AF\r
+ 0000493B C3 1F 81 547 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 0000493E 548 fontSearch:\r
+ 0000493E CD 88 81 549 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004941 00 00 550 DEFW 0\r
+ 00004943 21 0C 00 551 LD HL,12\r
+ 00004946 ED 4B C0 86 552 LD BC,(global)\r
+ 0000494A 09 553 ADD HL,BC\r
+ 0000494B 554 ?0321:\r
+ 0000494B 46 555 LD B,(HL)\r
+ 0000494C 23 556 INC HL\r
+ 0000494D 66 557 LD H,(HL)\r
+ 0000494E 68 558 LD L,B\r
+ 0000494F EB 559 EX DE,HL\r
+ 00004950 560 ?0012:\r
+ 00004950 7B 561 LD A,E\r
+ 00004951 B2 562 OR D\r
+ 00004952 28 16 563 JR Z,?0011\r
+ 00004954 6B 564 LD L,E\r
+ 00004955 62 565 LD H,D\r
+ 00004956 46 566 LD B,(HL)\r
+ 00004957 23 567 INC HL\r
+ 00004958 66 568 LD H,(HL)\r
+ 00004959 68 569 LD L,B\r
+ 0000495A DD 4E 02 570 LD C,(IX+2)\r
+ 0000495D DD 46 03 571 LD B,(IX+3)\r
+ 00004960 ED 42 572 SBC HL,BC\r
+ 00004962 28 06 573 JR Z,?0011\r
+ 00004964 574 ?0015:\r
+ 00004964 575 ?0014:\r
+ 00004964 576 ?0013:\r
+ 00004964 21 08 00 577 LD HL,8\r
+ 00004967 19 578 ADD HL,DE\r
+ 00004968 18 E1 579 JR ?0321\r
+ 0000496A 580 ?0011:\r
+ 0000496A EB 581 EX DE,HL\r
+ 0000496B C3 1F 81 582 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 0000496E 583 setCurrentFont:\r
+ 0000496E CD 52 81 584 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00004971 3E 00 585 LD A,BYTE3 fontSearch\r
+ 00004973 21 3E 49 586 LD HL,LWRD fontSearch\r
+ 00004976 CD EB 49 587 CALL LWRD ?0448\r
+ 00004979 28 29 588 JR Z,?0017\r
+ 0000497B 589 ?0016:\r
+ 0000497B DD 5E 02 590 LD E,(IX+2)\r
+ 0000497E DD 56 03 591 LD D,(IX+3)\r
+ 00004981 3E 00 592 LD A,BYTE3 grSetFont\r
+ 00004983 21 01 49 593 LD HL,LWRD grSetFont\r
+ 00004986 CD 5E 81 594 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004989 21 0A 00 595 LD HL,10\r
+ 0000498C ED 4B C0 86 596 LD BC,(global)\r
+ 00004990 09 597 ADD HL,BC\r
+ 00004991 E5 598 PUSH HL\r
+ 00004992 DD 5E 02 599 LD E,(IX+2)\r
+ 00004995 DD 56 03 600 LD D,(IX+3)\r
+ 00004998 3E 00 601 LD A,BYTE3 fontSearch\r
+ 0000499A 21 3E 49 602 LD HL,LWRD fontSearch\r
+ 0000499D CD F6 49 603 CALL LWRD ?0449\r
+ 000049A0 E1 604 POP HL\r
+ 000049A1 71 605 LD (HL),C\r
+ 000049A2 23 606 INC HL\r
+ 000049A3 70 607 LD (HL),B\r
+ 000049A4 608 ?0017:\r
+ 000049A4 C3 1F 81 609 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000049A7 610 ?0443:\r
+ 000049A7 ED 4B C0 86 611 LD BC,(global)\r
+ 000049AB 09 612 ADD HL,BC\r
+ 000049AC 46 613 LD B,(HL)\r
+ 000049AD 23 614 INC HL\r
+ 000049AE 66 615 LD H,(HL)\r
+ 000049AF 68 616 LD L,B\r
+ 000049B0 617 ?0442:\r
+ 000049B0 23 618 INC HL\r
+ 000049B1 23 619 INC HL\r
+ 000049B2 4E 620 LD C,(HL)\r
+ 000049B3 23 621 INC HL\r
+ 000049B4 46 622 LD B,(HL)\r
+ 000049B5 23 623 INC HL\r
+ 000049B6 7E 624 LD A,(HL)\r
+ 000049B7 69 625 LD L,C\r
+ 000049B8 60 626 LD H,B\r
+ 000049B9 CD 5E 81 627 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000049BC 4D 628 LD C,L\r
+ 000049BD 44 629 LD B,H\r
+ 000049BE FD 6E 06 630 LD L,(IY+6)\r
+ 000049C1 FD 66 07 631 LD H,(IY+7)\r
+ 000049C4 A7 632 AND A\r
+ 000049C5 ED 42 633 SBC HL,BC\r
+ 000049C7 EB 634 EX DE,HL\r
+ 000049C8 01 02 00 635 LD BC,2\r
+ 000049CB CD C1 81 636 CALL LWRD ?SS_DIV_L02\r
+ 000049CE DD 6E 04 637 LD L,(IX+4)\r
+ 000049D1 DD 66 05 638 LD H,(IX+5)\r
+ 000049D4 19 639 ADD HL,DE\r
+ 000049D5 EB 640 EX DE,HL\r
+ 000049D6 3E 00 641 LD A,BYTE3 Move\r
+ 000049D8 21 6C 46 642 LD HL,LWRD Move\r
+ 000049DB C9 643 RET\r
+ 000049DC 644 ?0444:\r
+ 000049DC CD 5E 81 645 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000049DF 4D 646 LD C,L\r
+ 000049E0 44 647 LD B,H\r
+ 000049E1 FD 6E 08 648 LD L,(IY+8)\r
+ 000049E4 FD 66 09 649 LD H,(IY+9)\r
+ 000049E7 A7 650 AND A\r
+ 000049E8 ED 42 651 SBC HL,BC\r
+ 000049EA C9 652 RET\r
+ 000049EB 653 ?0448:\r
+ 000049EB CD 5E 81 654 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000049EE 7D 655 LD A,L\r
+ 000049EF B4 656 OR H\r
+ 000049F0 C9 657 RET\r
+ 000049F1 658 ?0450:\r
+ 000049F1 3E 01 659 LD A,BYTE3 malloc\r
+ 000049F3 21 D8 42 660 LD HL,LWRD malloc\r
+ 000049F6 661 ?0449:\r
+ 000049F6 CD 5E 81 662 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000049F9 4D 663 LD C,L\r
+ 000049FA 44 664 LD B,H\r
+ 000049FB C9 665 RET\r
+ 000049FC 666 loadFont:\r
+ 000049FC CD 88 81 667 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000049FF FC FF 668 DEFW 65532\r
+ 00004A01 FD E5 669 PUSH IY\r
+ 00004A03 11 0E 00 670 LD DE,14\r
+ 00004A06 CD 97 4A 671 CALL LWRD ?0447\r
+ 00004A09 DD 4E 02 672 LD C,(IX+2)\r
+ 00004A0C 71 673 LD (HL),C\r
+ 00004A0D DD 46 03 674 LD B,(IX+3)\r
+ 00004A10 23 675 INC HL\r
+ 00004A11 70 676 LD (HL),B\r
+ 00004A12 DD 46 0C 677 LD B,(IX+12)\r
+ 00004A15 DD 6E 0A 678 LD L,(IX+10)\r
+ 00004A18 FD 75 02 679 LD (IY+2),L\r
+ 00004A1B DD 66 0B 680 LD H,(IX+11)\r
+ 00004A1E FD 74 03 681 LD (IY+3),H\r
+ 00004A21 FD 70 04 682 LD (IY+4),B\r
+ 00004A24 DD 46 10 683 LD B,(IX+16)\r
+ 00004A27 DD 6E 0E 684 LD L,(IX+14)\r
+ 00004A2A FD 75 05 685 LD (IY+5),L\r
+ 00004A2D DD 66 0F 686 LD H,(IX+15)\r
+ 00004A30 FD 74 06 687 LD (IY+6),H\r
+ 00004A33 FD 70 07 688 LD (IY+7),B\r
+ 00004A36 AF 689 XOR A\r
+ 00004A37 FD 77 08 690 LD (IY+8),A\r
+ 00004A3A FD 77 09 691 LD (IY+9),A\r
+ 00004A3D DD 6E 12 692 LD L,(IX+18)\r
+ 00004A40 FD 75 0A 693 LD (IY+10),L\r
+ 00004A43 DD 66 13 694 LD H,(IX+19)\r
+ 00004A46 FD 74 0B 695 LD (IY+11),H\r
+ 00004A49 DD 6E 14 696 LD L,(IX+20)\r
+ 00004A4C FD 75 0C 697 LD (IY+12),L\r
+ 00004A4F DD 66 15 698 LD H,(IX+21)\r
+ 00004A52 FD 74 0D 699 LD (IY+13),H\r
+ 00004A55 21 0C 00 700 LD HL,12\r
+ 00004A58 ED 4B C0 86 701 LD BC,(global)\r
+ 00004A5C 09 702 ADD HL,BC\r
+ 00004A5D 7E 703 LD A,(HL)\r
+ 00004A5E 23 704 INC HL\r
+ 00004A5F B6 705 OR (HL)\r
+ 00004A60 21 0C 00 706 LD HL,12\r
+ 00004A63 ED 4B C0 86 707 LD BC,(global)\r
+ 00004A67 09 708 ADD HL,BC\r
+ 00004A68 20 10 709 JR NZ,?0019\r
+ 00004A6A 710 ?0018:\r
+ 00004A6A FD E5 711 PUSH IY\r
+ 00004A6C C1 712 POP BC\r
+ 00004A6D 71 713 LD (HL),C\r
+ 00004A6E 23 714 INC HL\r
+ 00004A6F 70 715 LD (HL),B\r
+ 00004A70 21 0A 00 716 LD HL,10\r
+ 00004A73 ED 4B C0 86 717 LD BC,(global)\r
+ 00004A77 09 718 ADD HL,BC\r
+ 00004A78 18 12 719 JR ?0021\r
+ 00004A7A 720 ?0019:\r
+ 00004A7A 46 721 LD B,(HL)\r
+ 00004A7B 23 722 INC HL\r
+ 00004A7C 66 723 LD H,(HL)\r
+ 00004A7D 68 724 LD L,B\r
+ 00004A7E EB 725 EX DE,HL\r
+ 00004A7F 726 ?0022:\r
+ 00004A7F 21 08 00 727 LD HL,8\r
+ 00004A82 19 728 ADD HL,DE\r
+ 00004A83 7E 729 LD A,(HL)\r
+ 00004A84 23 730 INC HL\r
+ 00004A85 B6 731 OR (HL)\r
+ 00004A86 21 08 00 732 LD HL,8\r
+ 00004A89 19 733 ADD HL,DE\r
+ 00004A8A 20 EE 734 JR NZ,?0019\r
+ 00004A8C 735 ?0023:\r
+ 00004A8C 736 ?0021:\r
+ 00004A8C FD E5 737 PUSH IY\r
+ 00004A8E C1 738 POP BC\r
+ 00004A8F 71 739 LD (HL),C\r
+ 00004A90 23 740 INC HL\r
+ 00004A91 70 741 LD (HL),B\r
+ 00004A92 742 ?0020:\r
+ 00004A92 FD E1 743 POP IY\r
+ 00004A94 C3 1F 81 744 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004A97 745 ?0447:\r
+ 00004A97 3E 01 746 LD A,BYTE3 malloc\r
+ 00004A99 21 D8 42 747 LD HL,LWRD malloc\r
+ 00004A9C CD 5E 81 748 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004A9F E5 749 PUSH HL\r
+ 00004AA0 FD E1 750 POP IY\r
+ 00004AA2 C9 751 RET\r
+ 00004AA3 752 stringwidth:\r
+ 00004AA3 FD E5 753 PUSH IY\r
+ 00004AA5 DD E5 754 PUSH IX\r
+ 00004AA7 C5 755 PUSH BC\r
+ 00004AA8 D5 756 PUSH DE\r
+ 00004AA9 DD 21 00 00 757 LD IX,0\r
+ 00004AAD FD 21 00 00 758 LD IY,0\r
+ 00004AB1 759 ?0025:\r
+ 00004AB1 FD E5 760 PUSH IY\r
+ 00004AB3 21 02 00 761 LD HL,2\r
+ 00004AB6 39 762 ADD HL,SP\r
+ 00004AB7 4E 763 LD C,(HL)\r
+ 00004AB8 23 764 INC HL\r
+ 00004AB9 46 765 LD B,(HL)\r
+ 00004ABA E1 766 POP HL\r
+ 00004ABB 09 767 ADD HL,BC\r
+ 00004ABC 7E 768 LD A,(HL)\r
+ 00004ABD B7 769 OR A\r
+ 00004ABE 28 50 770 JR Z,?0024\r
+ 00004AC0 771 ?0026:\r
+ 00004AC0 FD E5 772 PUSH IY\r
+ 00004AC2 E1 773 POP HL\r
+ 00004AC3 09 774 ADD HL,BC\r
+ 00004AC4 5E 775 LD E,(HL)\r
+ 00004AC5 CD 40 81 776 CALL LWRD ?C_V_SWITCH_L06\r
+ 00004AC8 0A 00 777 DEFW 10\r
+ 00004ACA 21 778 DEFB 33\r
+ 00004ACB 2C 779 DEFB 44\r
+ 00004ACC 2E 780 DEFB 46\r
+ 00004ACD 31 781 DEFB 49\r
+ 00004ACE 49 782 DEFB 73\r
+ 00004ACF 69 783 DEFB 105\r
+ 00004AD0 6A 784 DEFB 106\r
+ 00004AD1 6B 785 DEFB 107\r
+ 00004AD2 6C 786 DEFB 108\r
+ 00004AD3 72 787 DEFB 114\r
+ 00004AD4 FE 4A 788 DEFW ?0032\r
+ 00004AD6 F9 4A 789 DEFW ?0031\r
+ 00004AD8 EF 4A 790 DEFW ?0029\r
+ 00004ADA F9 4A 791 DEFW ?0031\r
+ 00004ADC F9 4A 792 DEFW ?0031\r
+ 00004ADE EA 4A 793 DEFW ?0028\r
+ 00004AE0 EA 4A 794 DEFW ?0028\r
+ 00004AE2 F4 4A 795 DEFW ?0030\r
+ 00004AE4 F4 4A 796 DEFW ?0030\r
+ 00004AE6 F4 4A 797 DEFW ?0030\r
+ 00004AE8 EA 4A 798 DEFW ?0028\r
+ 00004AEA 799 ?0028:\r
+ 00004AEA 01 02 00 800 LD BC,2\r
+ 00004AED 18 12 801 JR ?0331\r
+ 00004AEF 802 ?0029:\r
+ 00004AEF 01 03 00 803 LD BC,3\r
+ 00004AF2 18 0D 804 JR ?0331\r
+ 00004AF4 805 ?0030:\r
+ 00004AF4 01 04 00 806 LD BC,4\r
+ 00004AF7 18 08 807 JR ?0331\r
+ 00004AF9 808 ?0031:\r
+ 00004AF9 01 05 00 809 LD BC,5\r
+ 00004AFC 18 03 810 JR ?0331\r
+ 00004AFE 811 ?0032:\r
+ 00004AFE 01 06 00 812 LD BC,6\r
+ 00004B01 813 ?0331:\r
+ 00004B01 DD 09 814 ADD IX,BC\r
+ 00004B03 815 ?0027:\r
+ 00004B03 21 02 00 816 LD HL,2\r
+ 00004B06 39 817 ADD HL,SP\r
+ 00004B07 4E 818 LD C,(HL)\r
+ 00004B08 23 819 INC HL\r
+ 00004B09 46 820 LD B,(HL)\r
+ 00004B0A DD 09 821 ADD IX,BC\r
+ 00004B0C FD 23 822 INC IY\r
+ 00004B0E 18 A1 823 JR ?0025\r
+ 00004B10 824 ?0024:\r
+ 00004B10 DD E5 825 PUSH IX\r
+ 00004B12 E1 826 POP HL\r
+ 00004B13 F1 827 POP AF\r
+ 00004B14 F1 828 POP AF\r
+ 00004B15 DD E1 829 POP IX\r
+ 00004B17 FD E1 830 POP IY\r
+ 00004B19 C3 25 81 831 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 00004B1C 832 stringheight:\r
+ 00004B1C CD 52 81 833 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00004B1F 7B 834 LD A,E\r
+ 00004B20 FE 80 835 CP 128\r
+ 00004B22 30 06 836 JR NC,?0034\r
+ 00004B24 837 ?0033:\r
+ 00004B24 21 07 00 838 LD HL,7\r
+ 00004B27 09 839 ADD HL,BC\r
+ 00004B28 18 0C 840 JR ?0036\r
+ 00004B2A 841 ?0034:\r
+ 00004B2A FE CC 842 CP 204\r
+ 00004B2C 38 08 843 JR C,?0036\r
+ 00004B2E 3E DF 844 LD A,223\r
+ 00004B30 BB 845 CP E\r
+ 00004B31 38 03 846 JR C,?0036\r
+ 00004B33 847 ?0038:\r
+ 00004B33 848 ?0037:\r
+ 00004B33 849 ?0035:\r
+ 00004B33 69 850 LD L,C\r
+ 00004B34 60 851 LD H,B\r
+ 00004B35 23 852 INC HL\r
+ 00004B36 853 ?0036:\r
+ 00004B36 854 ?0039:\r
+ 00004B36 C3 1F 81 855 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004B39 856 stringheight01:\r
+ 00004B39 CD 52 81 857 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00004B3C 01 00 00 858 LD BC,0\r
+ 00004B3F 859 ?0415:\r
+ 00004B3F 1A 860 LD A,(DE)\r
+ 00004B40 5F 861 LD E,A\r
+ 00004B41 3E 00 862 LD A,BYTE3 stringheight\r
+ 00004B43 21 1C 4B 863 LD HL,LWRD stringheight\r
+ 00004B46 CD 5E 81 864 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004B49 C3 1F 81 865 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004B4C 866 stringheight2:\r
+ 00004B4C CD 52 81 867 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00004B4F 01 05 00 868 LD BC,5\r
+ 00004B52 C3 3F 4B 869 JP LWRD ?0415\r
+ 00004B55 870 stringwidth0:\r
+ 00004B55 CD 52 81 871 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00004B58 01 00 00 872 LD BC,0\r
+ 00004B5B 873 ?0416:\r
+ 00004B5B 3E 00 874 LD A,BYTE3 stringwidth\r
+ 00004B5D 21 A3 4A 875 LD HL,LWRD stringwidth\r
+ 00004B60 CD 5E 81 876 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004B63 C3 1F 81 877 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004B66 878 stringwidth1:\r
+ 00004B66 CD 52 81 879 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00004B69 01 02 00 880 LD BC,2\r
+ 00004B6C C3 5B 4B 881 JP LWRD ?0416\r
+ 00004B6F 882 stringwidth2:\r
+ 00004B6F CD 52 81 883 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00004B72 01 03 00 884 LD BC,3\r
+ 00004B75 C3 5B 4B 885 JP LWRD ?0416\r
+ 00004B78 886 Component_new:\r
+ 00004B78 CD 88 81 887 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004B7B 00 00 888 DEFW 0\r
+ 00004B7D FD E5 889 PUSH IY\r
+ 00004B7F 11 28 00 890 LD DE,40\r
+ 00004B82 CD 97 4A 891 CALL LWRD ?0447\r
+ 00004B85 2A C0 86 892 LD HL,(global)\r
+ 00004B88 5E 893 LD E,(HL)\r
+ 00004B89 23 894 INC HL\r
+ 00004B8A 56 895 LD D,(HL)\r
+ 00004B8B 13 896 INC DE\r
+ 00004B8C 72 897 LD (HL),D\r
+ 00004B8D 2B 898 DEC HL\r
+ 00004B8E 73 899 LD (HL),E\r
+ 00004B8F FD E5 900 PUSH IY\r
+ 00004B91 E1 901 POP HL\r
+ 00004B92 73 902 LD (HL),E\r
+ 00004B93 23 903 INC HL\r
+ 00004B94 72 904 LD (HL),D\r
+ 00004B95 DD 6E 02 905 LD L,(IX+2)\r
+ 00004B98 FD 75 02 906 LD (IY+2),L\r
+ 00004B9B DD 66 03 907 LD H,(IX+3)\r
+ 00004B9E FD 74 03 908 LD (IY+3),H\r
+ 00004BA1 FD 71 04 909 LD (IY+4),C\r
+ 00004BA4 FD 70 05 910 LD (IY+5),B\r
+ 00004BA7 DD 6E 0A 911 LD L,(IX+10)\r
+ 00004BAA FD 75 06 912 LD (IY+6),L\r
+ 00004BAD DD 66 0B 913 LD H,(IX+11)\r
+ 00004BB0 FD 74 07 914 LD (IY+7),H\r
+ 00004BB3 DD 6E 0C 915 LD L,(IX+12)\r
+ 00004BB6 FD 75 08 916 LD (IY+8),L\r
+ 00004BB9 DD 66 0D 917 LD H,(IX+13)\r
+ 00004BBC FD 74 09 918 LD (IY+9),H\r
+ 00004BBF AF 919 XOR A\r
+ 00004BC0 FD 77 0A 920 LD (IY+10),A\r
+ 00004BC3 FD 77 0B 921 LD (IY+11),A\r
+ 00004BC6 FD 77 0C 922 LD (IY+12),A\r
+ 00004BC9 FD 77 0D 923 LD (IY+13),A\r
+ 00004BCC FD 77 0E 924 LD (IY+14),A\r
+ 00004BCF FD 77 0F 925 LD (IY+15),A\r
+ 00004BD2 FD 77 10 926 LD (IY+16),A\r
+ 00004BD5 FD 77 11 927 LD (IY+17),A\r
+ 00004BD8 FD 77 12 928 LD (IY+18),A\r
+ 00004BDB FD 77 13 929 LD (IY+19),A\r
+ 00004BDE FD 77 14 930 LD (IY+20),A\r
+ 00004BE1 FD 77 15 931 LD (IY+21),A\r
+ 00004BE4 FD 77 16 932 LD (IY+22),A\r
+ 00004BE7 FD 77 17 933 LD (IY+23),A\r
+ 00004BEA FD 77 18 934 LD (IY+24),A\r
+ 00004BED FD 77 19 935 LD (IY+25),A\r
+ 00004BF0 FD 77 1A 936 LD (IY+26),A\r
+ 00004BF3 FD 77 1B 937 LD (IY+27),A\r
+ 00004BF6 FD 77 1C 938 LD (IY+28),A\r
+ 00004BF9 FD 77 1D 939 LD (IY+29),A\r
+ 00004BFC FD 77 1E 940 LD (IY+30),A\r
+ 00004BFF FD 77 1F 941 LD (IY+31),A\r
+ 00004C02 FD 77 24 942 LD (IY+36),A\r
+ 00004C05 FD 77 25 943 LD (IY+37),A\r
+ 00004C08 FD 77 26 944 LD (IY+38),A\r
+ 00004C0B FD 77 27 945 LD (IY+39),A\r
+ 00004C0E FD 77 20 946 LD (IY+32),A\r
+ 00004C11 FD 77 21 947 LD (IY+33),A\r
+ 00004C14 FD 77 22 948 LD (IY+34),A\r
+ 00004C17 FD 77 23 949 LD (IY+35),A\r
+ 00004C1A 950 ?0418:\r
+ 00004C1A FD E5 951 PUSH IY\r
+ 00004C1C E1 952 POP HL\r
+ 00004C1D FD E1 953 POP IY\r
+ 00004C1F C3 1F 81 954 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004C22 955 Component_setlabel:\r
+ 00004C22 CD 88 81 956 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004C25 00 00 957 DEFW 0\r
+ 00004C27 FD E5 958 PUSH IY\r
+ 00004C29 DD 6E 02 959 LD L,(IX+2)\r
+ 00004C2C DD 66 03 960 LD H,(IX+3)\r
+ 00004C2F E5 961 PUSH HL\r
+ 00004C30 FD E1 962 POP IY\r
+ 00004C32 11 00 00 963 LD DE,0\r
+ 00004C35 964 ?0041:\r
+ 00004C35 DD 6E 04 965 LD L,(IX+4)\r
+ 00004C38 DD 66 05 966 LD H,(IX+5)\r
+ 00004C3B 19 967 ADD HL,DE\r
+ 00004C3C 7E 968 LD A,(HL)\r
+ 00004C3D B7 969 OR A\r
+ 00004C3E 28 21 970 JR Z,?0040\r
+ 00004C40 01 14 80 971 LD BC,32788\r
+ 00004C43 6B 972 LD L,E\r
+ 00004C44 62 973 LD H,D\r
+ 00004C45 78 974 LD A,B\r
+ 00004C46 AC 975 XOR H\r
+ 00004C47 67 976 LD H,A\r
+ 00004C48 ED 42 977 SBC HL,BC\r
+ 00004C4A 30 15 978 JR NC,?0040\r
+ 00004C4C 979 ?0044:\r
+ 00004C4C 980 ?0043:\r
+ 00004C4C 981 ?0042:\r
+ 00004C4C FD 6E 20 982 LD L,(IY+32)\r
+ 00004C4F FD 66 21 983 LD H,(IY+33)\r
+ 00004C52 19 984 ADD HL,DE\r
+ 00004C53 E5 985 PUSH HL\r
+ 00004C54 DD 6E 04 986 LD L,(IX+4)\r
+ 00004C57 DD 66 05 987 LD H,(IX+5)\r
+ 00004C5A 19 988 ADD HL,DE\r
+ 00004C5B 46 989 LD B,(HL)\r
+ 00004C5C E1 990 POP HL\r
+ 00004C5D 70 991 LD (HL),B\r
+ 00004C5E 13 992 INC DE\r
+ 00004C5F 18 D4 993 JR ?0041\r
+ 00004C61 994 ?0040:\r
+ 00004C61 FD 6E 20 995 LD L,(IY+32)\r
+ 00004C64 FD 66 21 996 LD H,(IY+33)\r
+ 00004C67 19 997 ADD HL,DE\r
+ 00004C68 36 00 998 LD (HL),0\r
+ 00004C6A FD E1 999 POP IY\r
+ 00004C6C C3 1F 81 1000 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004C6F 1001 Component_add:\r
+ 00004C6F CD 88 81 1002 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004C72 00 00 1003 DEFW 0\r
+ 00004C74 FD E5 1004 PUSH IY\r
+ 00004C76 59 1005 LD E,C\r
+ 00004C77 50 1006 LD D,B\r
+ 00004C78 21 15 00 1007 LD HL,21\r
+ 00004C7B DD 4E 02 1008 LD C,(IX+2)\r
+ 00004C7E DD 46 03 1009 LD B,(IX+3)\r
+ 00004C81 09 1010 ADD HL,BC\r
+ 00004C82 7E 1011 LD A,(HL)\r
+ 00004C83 23 1012 INC HL\r
+ 00004C84 66 1013 LD H,(HL)\r
+ 00004C85 6F 1014 LD L,A\r
+ 00004C86 E5 1015 PUSH HL\r
+ 00004C87 FD E1 1016 POP IY\r
+ 00004C89 21 15 00 1017 LD HL,21\r
+ 00004C8C 09 1018 ADD HL,BC\r
+ 00004C8D 7E 1019 LD A,(HL)\r
+ 00004C8E 23 1020 INC HL\r
+ 00004C8F B6 1021 OR (HL)\r
+ 00004C90 20 09 1022 JR NZ,?0046\r
+ 00004C92 1023 ?0045:\r
+ 00004C92 21 15 00 1024 LD HL,21\r
+ 00004C95 09 1025 ADD HL,BC\r
+ 00004C96 73 1026 LD (HL),E\r
+ 00004C97 23 1027 INC HL\r
+ 00004C98 72 1028 LD (HL),D\r
+ 00004C99 18 19 1029 JR ?0335\r
+ 00004C9B 1030 ?0046:\r
+ 00004C9B 1031 ?0049:\r
+ 00004C9B FD 7E 13 1032 LD A,(IY+19)\r
+ 00004C9E FD B6 14 1033 OR (IY+20)\r
+ 00004CA1 28 0B 1034 JR Z,?0048\r
+ 00004CA3 1035 ?0050:\r
+ 00004CA3 FD 6E 13 1036 LD L,(IY+19)\r
+ 00004CA6 FD 66 14 1037 LD H,(IY+20)\r
+ 00004CA9 E5 1038 PUSH HL\r
+ 00004CAA FD E1 1039 POP IY\r
+ 00004CAC 18 ED 1040 JR ?0046\r
+ 00004CAE 1041 ?0048:\r
+ 00004CAE FD 73 13 1042 LD (IY+19),E\r
+ 00004CB1 FD 72 14 1043 LD (IY+20),D\r
+ 00004CB4 1044 ?0335:\r
+ 00004CB4 21 13 00 1045 LD HL,19\r
+ 00004CB7 19 1046 ADD HL,DE\r
+ 00004CB8 77 1047 LD (HL),A\r
+ 00004CB9 23 1048 INC HL\r
+ 00004CBA 77 1049 LD (HL),A\r
+ 00004CBB 1050 ?0047:\r
+ 00004CBB 21 11 00 1051 LD HL,17\r
+ 00004CBE 19 1052 ADD HL,DE\r
+ 00004CBF DD 4E 02 1053 LD C,(IX+2)\r
+ 00004CC2 71 1054 LD (HL),C\r
+ 00004CC3 DD 46 03 1055 LD B,(IX+3)\r
+ 00004CC6 23 1056 INC HL\r
+ 00004CC7 70 1057 LD (HL),B\r
+ 00004CC8 FD E1 1058 POP IY\r
+ 00004CCA C3 1F 81 1059 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004CCD 1060 Component_paint:\r
+ 00004CCD C5 1061 PUSH BC\r
+ 00004CCE FD E5 1062 PUSH IY\r
+ 00004CD0 DD E5 1063 PUSH IX\r
+ 00004CD2 21 15 00 1064 LD HL,21\r
+ 00004CD5 19 1065 ADD HL,DE\r
+ 00004CD6 46 1066 LD B,(HL)\r
+ 00004CD7 23 1067 INC HL\r
+ 00004CD8 66 1068 LD H,(HL)\r
+ 00004CD9 68 1069 LD L,B\r
+ 00004CDA E5 1070 PUSH HL\r
+ 00004CDB DD E1 1071 POP IX\r
+ 00004CDD CD 09 4D 1072 CALL LWRD ?0477\r
+ 00004CE0 1073 ?0052:\r
+ 00004CE0 DD E5 1074 PUSH IX\r
+ 00004CE2 E1 1075 POP HL\r
+ 00004CE3 7D 1076 LD A,L\r
+ 00004CE4 B4 1077 OR H\r
+ 00004CE5 28 1A 1078 JR Z,?0051\r
+ 00004CE7 1079 ?0053:\r
+ 00004CE7 DD E5 1080 PUSH IX\r
+ 00004CE9 D1 1081 POP DE\r
+ 00004CEA DD 7E 1C 1082 LD A,(IX+28)\r
+ 00004CED DD 6E 1A 1083 LD L,(IX+26)\r
+ 00004CF0 DD 66 1B 1084 LD H,(IX+27)\r
+ 00004CF3 CD 5E 81 1085 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004CF6 DD 6E 13 1086 LD L,(IX+19)\r
+ 00004CF9 DD 66 14 1087 LD H,(IX+20)\r
+ 00004CFC E5 1088 PUSH HL\r
+ 00004CFD DD E1 1089 POP IX\r
+ 00004CFF 18 DF 1090 JR ?0052\r
+ 00004D01 1091 ?0051:\r
+ 00004D01 1E 01 1092 LD E,1\r
+ 00004D03 CD 0B 4D 1093 CALL LWRD ?0478\r
+ 00004D06 C3 27 48 1094 JP LWRD ?0411\r
+ 00004D09 1095 ?0477:\r
+ 00004D09 1E 00 1096 LD E,0\r
+ 00004D0B 1097 ?0478:\r
+ 00004D0B 3E 00 1098 LD A,BYTE3 EnableScreen\r
+ 00004D0D 21 C3 48 1099 LD HL,LWRD EnableScreen\r
+ 00004D10 C3 5E 81 1100 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004D13 1101 Component_findXY:\r
+ 00004D13 CD 88 81 1102 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004D16 00 00 1103 DEFW 0\r
+ 00004D18 FD E5 1104 PUSH IY\r
+ 00004D1A DD 6E 02 1105 LD L,(IX+2)\r
+ 00004D1D DD 66 03 1106 LD H,(IX+3)\r
+ 00004D20 E5 1107 PUSH HL\r
+ 00004D21 FD E1 1108 POP IY\r
+ 00004D23 1109 ?0056:\r
+ 00004D23 DD 6E 04 1110 LD L,(IX+4)\r
+ 00004D26 DD 66 05 1111 LD H,(IX+5)\r
+ 00004D29 7E 1112 LD A,(HL)\r
+ 00004D2A FD 86 02 1113 ADD A,(IY+2)\r
+ 00004D2D 77 1114 LD (HL),A\r
+ 00004D2E 23 1115 INC HL\r
+ 00004D2F 7E 1116 LD A,(HL)\r
+ 00004D30 FD 8E 03 1117 ADC A,(IY+3)\r
+ 00004D33 77 1118 LD (HL),A\r
+ 00004D34 DD 6E 0A 1119 LD L,(IX+10)\r
+ 00004D37 DD 66 0B 1120 LD H,(IX+11)\r
+ 00004D3A 7E 1121 LD A,(HL)\r
+ 00004D3B FD 86 04 1122 ADD A,(IY+4)\r
+ 00004D3E 77 1123 LD (HL),A\r
+ 00004D3F 23 1124 INC HL\r
+ 00004D40 7E 1125 LD A,(HL)\r
+ 00004D41 FD 8E 05 1126 ADC A,(IY+5)\r
+ 00004D44 77 1127 LD (HL),A\r
+ 00004D45 FD 6E 11 1128 LD L,(IY+17)\r
+ 00004D48 FD 66 12 1129 LD H,(IY+18)\r
+ 00004D4B E5 1130 PUSH HL\r
+ 00004D4C FD E1 1131 POP IY\r
+ 00004D4E 7D 1132 LD A,L\r
+ 00004D4F B4 1133 OR H\r
+ 00004D50 20 D1 1134 JR NZ,?0056\r
+ 00004D52 1135 ?0054:\r
+ 00004D52 FD E1 1136 POP IY\r
+ 00004D54 C3 1F 81 1137 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004D57 1138 Component_find:\r
+ 00004D57 CD 88 81 1139 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004D5A 00 00 1140 DEFW 0\r
+ 00004D5C 21 15 00 1141 LD HL,21\r
+ 00004D5F DD 4E 02 1142 LD C,(IX+2)\r
+ 00004D62 DD 46 03 1143 LD B,(IX+3)\r
+ 00004D65 09 1144 ADD HL,BC\r
+ 00004D66 1145 ?0336:\r
+ 00004D66 46 1146 LD B,(HL)\r
+ 00004D67 23 1147 INC HL\r
+ 00004D68 66 1148 LD H,(HL)\r
+ 00004D69 68 1149 LD L,B\r
+ 00004D6A EB 1150 EX DE,HL\r
+ 00004D6B 1151 ?0058:\r
+ 00004D6B 7B 1152 LD A,E\r
+ 00004D6C B2 1153 OR D\r
+ 00004D6D 28 1B 1154 JR Z,?0057\r
+ 00004D6F 1155 ?0059:\r
+ 00004D6F 21 10 00 1156 LD HL,16\r
+ 00004D72 19 1157 ADD HL,DE\r
+ 00004D73 4E 1158 LD C,(HL)\r
+ 00004D74 06 00 1159 LD B,0\r
+ 00004D76 DD 6E 04 1160 LD L,(IX+4)\r
+ 00004D79 DD 66 05 1161 LD H,(IX+5)\r
+ 00004D7C A7 1162 AND A\r
+ 00004D7D ED 42 1163 SBC HL,BC\r
+ 00004D7F 20 03 1164 JR NZ,?0061\r
+ 00004D81 1165 ?0060:\r
+ 00004D81 EB 1166 EX DE,HL\r
+ 00004D82 18 08 1167 JR ?0062\r
+ 00004D84 1168 ?0061:\r
+ 00004D84 21 13 00 1169 LD HL,19\r
+ 00004D87 19 1170 ADD HL,DE\r
+ 00004D88 18 DC 1171 JR ?0336\r
+ 00004D8A 1172 ?0057:\r
+ 00004D8A 6F 1173 LD L,A\r
+ 00004D8B 67 1174 LD H,A\r
+ 00004D8C 1175 ?0062:\r
+ 00004D8C C3 1F 81 1176 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004D8F 1177 Component_delete:\r
+ 00004D8F CD 88 81 1178 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004D92 F8 FF 1179 DEFW 65528\r
+ 00004D94 FD E5 1180 PUSH IY\r
+ 00004D96 DD 6E 02 1181 LD L,(IX+2)\r
+ 00004D99 DD 66 03 1182 LD H,(IX+3)\r
+ 00004D9C E5 1183 PUSH HL\r
+ 00004D9D FD E1 1184 POP IY\r
+ 00004D9F FD 6E 15 1185 LD L,(IY+21)\r
+ 00004DA2 DD 75 F8 1186 LD (IX-8),L\r
+ 00004DA5 FD 66 16 1187 LD H,(IY+22)\r
+ 00004DA8 DD 74 F9 1188 LD (IX-7),H\r
+ 00004DAB FD E5 1189 PUSH IY\r
+ 00004DAD E1 1190 POP HL\r
+ 00004DAE 7D 1191 LD A,L\r
+ 00004DAF B4 1192 OR H\r
+ 00004DB0 CA 42 4F 1193 JP Z,?0064\r
+ 00004DB3 1194 ?0063:\r
+ 00004DB3 1195 ?0066:\r
+ 00004DB3 DD 7E F8 1196 LD A,(IX-8)\r
+ 00004DB6 DD B6 F9 1197 OR (IX-7)\r
+ 00004DB9 28 11 1198 JR Z,?0065\r
+ 00004DBB 1199 ?0067:\r
+ 00004DBB DD 5E F8 1200 LD E,(IX-8)\r
+ 00004DBE DD 56 F9 1201 LD D,(IX-7)\r
+ 00004DC1 CD 58 4F 1202 CALL LWRD ?0453\r
+ 00004DC4 DD 75 F8 1203 LD (IX-8),L\r
+ 00004DC7 DD 74 F9 1204 LD (IX-7),H\r
+ 00004DCA 18 E7 1205 JR ?0063\r
+ 00004DCC 1206 ?0065:\r
+ 00004DCC FD 7E 11 1207 LD A,(IY+17)\r
+ 00004DCF FD B6 12 1208 OR (IY+18)\r
+ 00004DD2 CA 5E 4E 1209 JP Z,?0079\r
+ 00004DD5 1210 ?0068:\r
+ 00004DD5 FD 6E 11 1211 LD L,(IY+17)\r
+ 00004DD8 FD 66 12 1212 LD H,(IY+18)\r
+ 00004DDB 01 15 00 1213 LD BC,21\r
+ 00004DDE 09 1214 ADD HL,BC\r
+ 00004DDF 46 1215 LD B,(HL)\r
+ 00004DE0 23 1216 INC HL\r
+ 00004DE1 66 1217 LD H,(HL)\r
+ 00004DE2 68 1218 LD L,B\r
+ 00004DE3 FD E5 1219 PUSH IY\r
+ 00004DE5 C1 1220 POP BC\r
+ 00004DE6 A7 1221 AND A\r
+ 00004DE7 ED 42 1222 SBC HL,BC\r
+ 00004DE9 FD 6E 11 1223 LD L,(IY+17)\r
+ 00004DEC FD 66 12 1224 LD H,(IY+18)\r
+ 00004DEF 01 15 00 1225 LD BC,21\r
+ 00004DF2 09 1226 ADD HL,BC\r
+ 00004DF3 20 09 1227 JR NZ,?0071\r
+ 00004DF5 1228 ?0070:\r
+ 00004DF5 E5 1229 PUSH HL\r
+ 00004DF6 FD 6E 11 1230 LD L,(IY+17)\r
+ 00004DF9 FD 66 12 1231 LD H,(IY+18)\r
+ 00004DFC 18 50 1232 JR ?0339\r
+ 00004DFE 1233 ?0071:\r
+ 00004DFE 46 1234 LD B,(HL)\r
+ 00004DFF 23 1235 INC HL\r
+ 00004E00 66 1236 LD H,(HL)\r
+ 00004E01 68 1237 LD L,B\r
+ 00004E02 1238 ?0338:\r
+ 00004E02 DD 75 F8 1239 LD (IX-8),L\r
+ 00004E05 DD 74 F9 1240 LD (IX-7),H\r
+ 00004E08 1241 ?0074:\r
+ 00004E08 21 13 00 1242 LD HL,19\r
+ 00004E0B DD 4E F8 1243 LD C,(IX-8)\r
+ 00004E0E DD 46 F9 1244 LD B,(IX-7)\r
+ 00004E11 09 1245 ADD HL,BC\r
+ 00004E12 46 1246 LD B,(HL)\r
+ 00004E13 23 1247 INC HL\r
+ 00004E14 66 1248 LD H,(HL)\r
+ 00004E15 68 1249 LD L,B\r
+ 00004E16 FD E5 1250 PUSH IY\r
+ 00004E18 C1 1251 POP BC\r
+ 00004E19 A7 1252 AND A\r
+ 00004E1A ED 42 1253 SBC HL,BC\r
+ 00004E1C 28 19 1254 JR Z,?0073\r
+ 00004E1E 21 13 00 1255 LD HL,19\r
+ 00004E21 DD 4E F8 1256 LD C,(IX-8)\r
+ 00004E24 DD 46 F9 1257 LD B,(IX-7)\r
+ 00004E27 09 1258 ADD HL,BC\r
+ 00004E28 7E 1259 LD A,(HL)\r
+ 00004E29 23 1260 INC HL\r
+ 00004E2A B6 1261 OR (HL)\r
+ 00004E2B 28 0A 1262 JR Z,?0073\r
+ 00004E2D 1263 ?0077:\r
+ 00004E2D 1264 ?0076:\r
+ 00004E2D 1265 ?0075:\r
+ 00004E2D 21 13 00 1266 LD HL,19\r
+ 00004E30 09 1267 ADD HL,BC\r
+ 00004E31 56 1268 LD D,(HL)\r
+ 00004E32 23 1269 INC HL\r
+ 00004E33 66 1270 LD H,(HL)\r
+ 00004E34 6A 1271 LD L,D\r
+ 00004E35 18 CB 1272 JR ?0338\r
+ 00004E37 1273 ?0073:\r
+ 00004E37 21 13 00 1274 LD HL,19\r
+ 00004E3A DD 4E F8 1275 LD C,(IX-8)\r
+ 00004E3D DD 46 F9 1276 LD B,(IX-7)\r
+ 00004E40 09 1277 ADD HL,BC\r
+ 00004E41 7E 1278 LD A,(HL)\r
+ 00004E42 23 1279 INC HL\r
+ 00004E43 B6 1280 OR (HL)\r
+ 00004E44 28 18 1281 JR Z,?0079\r
+ 00004E46 1282 ?0078:\r
+ 00004E46 21 13 00 1283 LD HL,19\r
+ 00004E49 09 1284 ADD HL,BC\r
+ 00004E4A E5 1285 PUSH HL\r
+ 00004E4B 21 13 00 1286 LD HL,19\r
+ 00004E4E 1287 ?0339:\r
+ 00004E4E 09 1288 ADD HL,BC\r
+ 00004E4F 46 1289 LD B,(HL)\r
+ 00004E50 23 1290 INC HL\r
+ 00004E51 66 1291 LD H,(HL)\r
+ 00004E52 68 1292 LD L,B\r
+ 00004E53 01 13 00 1293 LD BC,19\r
+ 00004E56 09 1294 ADD HL,BC\r
+ 00004E57 4E 1295 LD C,(HL)\r
+ 00004E58 23 1296 INC HL\r
+ 00004E59 46 1297 LD B,(HL)\r
+ 00004E5A E1 1298 POP HL\r
+ 00004E5B 71 1299 LD (HL),C\r
+ 00004E5C 23 1300 INC HL\r
+ 00004E5D 70 1301 LD (HL),B\r
+ 00004E5E 1302 ?0079:\r
+ 00004E5E 1303 ?0072:\r
+ 00004E5E 1304 ?0069:\r
+ 00004E5E FD 6E 13 1305 LD L,(IY+19)\r
+ 00004E61 DD 75 F8 1306 LD (IX-8),L\r
+ 00004E64 FD 66 14 1307 LD H,(IY+20)\r
+ 00004E67 DD 74 F9 1308 LD (IX-7),H\r
+ 00004E6A 3E 04 1309 LD A,4\r
+ 00004E6C FD AE 24 1310 XOR (IY+36)\r
+ 00004E6F FD B6 25 1311 OR (IY+37)\r
+ 00004E72 C2 0E 4F 1312 JP NZ,?0088\r
+ 00004E75 1313 ?0080:\r
+ 00004E75 FD 6E 11 1314 LD L,(IY+17)\r
+ 00004E78 DD 75 FC 1315 LD (IX-4),L\r
+ 00004E7B FD 66 12 1316 LD H,(IY+18)\r
+ 00004E7E DD 74 FD 1317 LD (IX-3),H\r
+ 00004E81 FD 6E 26 1318 LD L,(IY+38)\r
+ 00004E84 DD 75 FE 1319 LD (IX-2),L\r
+ 00004E87 FD 66 27 1320 LD H,(IY+39)\r
+ 00004E8A DD 74 FF 1321 LD (IX-1),H\r
+ 00004E8D CD 4D 4F 1322 CALL LWRD ?0451\r
+ 00004E90 DD 6E FE 1323 LD L,(IX-2)\r
+ 00004E93 DD 66 FF 1324 LD H,(IX-1)\r
+ 00004E96 23 1325 INC HL\r
+ 00004E97 23 1326 INC HL\r
+ 00004E98 CD 4D 4F 1327 CALL LWRD ?0451\r
+ 00004E9B 1328 ?0083:\r
+ 00004E9B DD 7E FC 1329 LD A,(IX-4)\r
+ 00004E9E DD B6 FD 1330 OR (IX-3)\r
+ 00004EA1 28 20 1331 JR Z,?0082\r
+ 00004EA3 21 24 00 1332 LD HL,36\r
+ 00004EA6 DD 4E FC 1333 LD C,(IX-4)\r
+ 00004EA9 DD 46 FD 1334 LD B,(IX-3)\r
+ 00004EAC 09 1335 ADD HL,BC\r
+ 00004EAD 3E 04 1336 LD A,4\r
+ 00004EAF AE 1337 XOR (HL)\r
+ 00004EB0 23 1338 INC HL\r
+ 00004EB1 B6 1339 OR (HL)\r
+ 00004EB2 28 0F 1340 JR Z,?0082\r
+ 00004EB4 1341 ?0086:\r
+ 00004EB4 1342 ?0085:\r
+ 00004EB4 1343 ?0084:\r
+ 00004EB4 21 11 00 1344 LD HL,17\r
+ 00004EB7 09 1345 ADD HL,BC\r
+ 00004EB8 56 1346 LD D,(HL)\r
+ 00004EB9 DD 72 FC 1347 LD (IX-4),D\r
+ 00004EBC 23 1348 INC HL\r
+ 00004EBD 66 1349 LD H,(HL)\r
+ 00004EBE DD 74 FD 1350 LD (IX-3),H\r
+ 00004EC1 18 D8 1351 JR ?0083\r
+ 00004EC3 1352 ?0082:\r
+ 00004EC3 DD 7E FC 1353 LD A,(IX-4)\r
+ 00004EC6 DD B6 FD 1354 OR (IX-3)\r
+ 00004EC9 28 43 1355 JR Z,?0088\r
+ 00004ECB 1356 ?0087:\r
+ 00004ECB 21 26 00 1357 LD HL,38\r
+ 00004ECE DD 4E FC 1358 LD C,(IX-4)\r
+ 00004ED1 DD 46 FD 1359 LD B,(IX-3)\r
+ 00004ED4 09 1360 ADD HL,BC\r
+ 00004ED5 46 1361 LD B,(HL)\r
+ 00004ED6 DD 70 FE 1362 LD (IX-2),B\r
+ 00004ED9 23 1363 INC HL\r
+ 00004EDA 66 1364 LD H,(HL)\r
+ 00004EDB DD 74 FF 1365 LD (IX-1),H\r
+ 00004EDE 21 06 00 1366 LD HL,6\r
+ 00004EE1 ED 4B C0 86 1367 LD BC,(global)\r
+ 00004EE5 09 1368 ADD HL,BC\r
+ 00004EE6 E5 1369 PUSH HL\r
+ 00004EE7 DD 6E FE 1370 LD L,(IX-2)\r
+ 00004EEA DD 66 FF 1371 LD H,(IX-1)\r
+ 00004EED 5E 1372 LD E,(HL)\r
+ 00004EEE 23 1373 INC HL\r
+ 00004EEF 56 1374 LD D,(HL)\r
+ 00004EF0 E1 1375 POP HL\r
+ 00004EF1 73 1376 LD (HL),E\r
+ 00004EF2 23 1377 INC HL\r
+ 00004EF3 72 1378 LD (HL),D\r
+ 00004EF4 21 08 00 1379 LD HL,8\r
+ 00004EF7 ED 4B C0 86 1380 LD BC,(global)\r
+ 00004EFB 09 1381 ADD HL,BC\r
+ 00004EFC E5 1382 PUSH HL\r
+ 00004EFD DD 4E FE 1383 LD C,(IX-2)\r
+ 00004F00 DD 46 FF 1384 LD B,(IX-1)\r
+ 00004F03 03 1385 INC BC\r
+ 00004F04 03 1386 INC BC\r
+ 00004F05 69 1387 LD L,C\r
+ 00004F06 60 1388 LD H,B\r
+ 00004F07 4E 1389 LD C,(HL)\r
+ 00004F08 23 1390 INC HL\r
+ 00004F09 46 1391 LD B,(HL)\r
+ 00004F0A E1 1392 POP HL\r
+ 00004F0B 71 1393 LD (HL),C\r
+ 00004F0C 23 1394 INC HL\r
+ 00004F0D 70 1395 LD (HL),B\r
+ 00004F0E 1396 ?0088:\r
+ 00004F0E 1397 ?0081:\r
+ 00004F0E FD 4E 24 1398 LD C,(IY+36)\r
+ 00004F11 FD 46 25 1399 LD B,(IY+37)\r
+ 00004F14 21 00 00 1400 LD HL,0\r
+ 00004F17 CD A6 81 1401 CALL LWRD ?SS_CMP_L02\r
+ 00004F1A 30 09 1402 JR NC,?0090\r
+ 00004F1C 1403 ?0089:\r
+ 00004F1C FD 5E 26 1404 LD E,(IY+38)\r
+ 00004F1F FD 56 27 1405 LD D,(IY+39)\r
+ 00004F22 CD 50 4F 1406 CALL LWRD ?0452\r
+ 00004F25 1407 ?0090:\r
+ 00004F25 FD CB 0B 76 1408 BIT 6,(IY+11)\r
+ 00004F29 20 11 1409 JR NZ,?0092\r
+ 00004F2B FD 7E 20 1410 LD A,(IY+32)\r
+ 00004F2E FD B6 21 1411 OR (IY+33)\r
+ 00004F31 28 09 1412 JR Z,?0092\r
+ 00004F33 1413 ?0094:\r
+ 00004F33 1414 ?0093:\r
+ 00004F33 1415 ?0091:\r
+ 00004F33 FD 5E 20 1416 LD E,(IY+32)\r
+ 00004F36 FD 56 21 1417 LD D,(IY+33)\r
+ 00004F39 CD 50 4F 1418 CALL LWRD ?0452\r
+ 00004F3C 1419 ?0092:\r
+ 00004F3C FD E5 1420 PUSH IY\r
+ 00004F3E D1 1421 POP DE\r
+ 00004F3F CD 50 4F 1422 CALL LWRD ?0452\r
+ 00004F42 1423 ?0064:\r
+ 00004F42 DD 6E F8 1424 LD L,(IX-8)\r
+ 00004F45 DD 66 F9 1425 LD H,(IX-7)\r
+ 00004F48 FD E1 1426 POP IY\r
+ 00004F4A C3 1F 81 1427 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004F4D 1428 ?0451:\r
+ 00004F4D 5E 1429 LD E,(HL)\r
+ 00004F4E 23 1430 INC HL\r
+ 00004F4F 56 1431 LD D,(HL)\r
+ 00004F50 1432 ?0452:\r
+ 00004F50 3E 00 1433 LD A,BYTE3 free\r
+ 00004F52 21 E5 73 1434 LD HL,LWRD free\r
+ 00004F55 C3 5E 81 1435 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004F58 1436 ?0453:\r
+ 00004F58 3E 00 1437 LD A,BYTE3 Component_delete\r
+ 00004F5A 21 8F 4D 1438 LD HL,LWRD Component_delete\r
+ 00004F5D C3 5E 81 1439 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004F60 1440 Component_delete_children:\r
+ 00004F60 C5 1441 PUSH BC\r
+ 00004F61 FD E5 1442 PUSH IY\r
+ 00004F63 DD E5 1443 PUSH IX\r
+ 00004F65 21 15 00 1444 LD HL,21\r
+ 00004F68 19 1445 ADD HL,DE\r
+ 00004F69 46 1446 LD B,(HL)\r
+ 00004F6A 23 1447 INC HL\r
+ 00004F6B 66 1448 LD H,(HL)\r
+ 00004F6C 68 1449 LD L,B\r
+ 00004F6D 1450 ?0341:\r
+ 00004F6D E5 1451 PUSH HL\r
+ 00004F6E DD E1 1452 POP IX\r
+ 00004F70 1453 ?0096:\r
+ 00004F70 7D 1454 LD A,L\r
+ 00004F71 B4 1455 OR H\r
+ 00004F72 28 08 1456 JR Z,?0095\r
+ 00004F74 1457 ?0097:\r
+ 00004F74 DD E5 1458 PUSH IX\r
+ 00004F76 D1 1459 POP DE\r
+ 00004F77 CD 58 4F 1460 CALL LWRD ?0453\r
+ 00004F7A 18 F1 1461 JR ?0341\r
+ 00004F7C 1462 ?0095:\r
+ 00004F7C C3 27 48 1463 JP LWRD ?0411\r
+ 00004F7F 1464 Component_changestate_children:\r
+ 00004F7F CD 88 81 1465 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00004F82 00 00 1466 DEFW 0\r
+ 00004F84 FD E5 1467 PUSH IY\r
+ 00004F86 21 15 00 1468 LD HL,21\r
+ 00004F89 DD 5E 02 1469 LD E,(IX+2)\r
+ 00004F8C DD 56 03 1470 LD D,(IX+3)\r
+ 00004F8F 19 1471 ADD HL,DE\r
+ 00004F90 1472 ?0342:\r
+ 00004F90 56 1473 LD D,(HL)\r
+ 00004F91 23 1474 INC HL\r
+ 00004F92 66 1475 LD H,(HL)\r
+ 00004F93 6A 1476 LD L,D\r
+ 00004F94 E5 1477 PUSH HL\r
+ 00004F95 FD E1 1478 POP IY\r
+ 00004F97 1479 ?0099:\r
+ 00004F97 7D 1480 LD A,L\r
+ 00004F98 B4 1481 OR H\r
+ 00004F99 28 3D 1482 JR Z,?0098\r
+ 00004F9B 1483 ?0100:\r
+ 00004F9B 21 0A 00 1484 LD HL,10\r
+ 00004F9E FD E5 1485 PUSH IY\r
+ 00004FA0 C1 1486 POP BC\r
+ 00004FA1 09 1487 ADD HL,BC\r
+ 00004FA2 DD 7E 04 1488 LD A,(IX+4)\r
+ 00004FA5 DD 56 05 1489 LD D,(IX+5)\r
+ 00004FA8 2F 1490 CPL\r
+ 00004FA9 5F 1491 LD E,A\r
+ 00004FAA 7A 1492 LD A,D\r
+ 00004FAB 2F 1493 CPL\r
+ 00004FAC 57 1494 LD D,A\r
+ 00004FAD 7E 1495 LD A,(HL)\r
+ 00004FAE A3 1496 AND E\r
+ 00004FAF 77 1497 LD (HL),A\r
+ 00004FB0 23 1498 INC HL\r
+ 00004FB1 7E 1499 LD A,(HL)\r
+ 00004FB2 A2 1500 AND D\r
+ 00004FB3 77 1501 LD (HL),A\r
+ 00004FB4 21 0A 00 1502 LD HL,10\r
+ 00004FB7 09 1503 ADD HL,BC\r
+ 00004FB8 7E 1504 LD A,(HL)\r
+ 00004FB9 DD B6 0A 1505 OR (IX+10)\r
+ 00004FBC 77 1506 LD (HL),A\r
+ 00004FBD 23 1507 INC HL\r
+ 00004FBE 7E 1508 LD A,(HL)\r
+ 00004FBF DD B6 0B 1509 OR (IX+11)\r
+ 00004FC2 77 1510 LD (HL),A\r
+ 00004FC3 21 0A 00 1511 LD HL,10\r
+ 00004FC6 09 1512 ADD HL,BC\r
+ 00004FC7 7E 1513 LD A,(HL)\r
+ 00004FC8 DD AE 0C 1514 XOR (IX+12)\r
+ 00004FCB 77 1515 LD (HL),A\r
+ 00004FCC 23 1516 INC HL\r
+ 00004FCD 7E 1517 LD A,(HL)\r
+ 00004FCE DD AE 0D 1518 XOR (IX+13)\r
+ 00004FD1 77 1519 LD (HL),A\r
+ 00004FD2 21 13 00 1520 LD HL,19\r
+ 00004FD5 09 1521 ADD HL,BC\r
+ 00004FD6 18 B8 1522 JR ?0342\r
+ 00004FD8 1523 ?0098:\r
+ 00004FD8 11 77 85 1524 LD DE,stdout\r
+ 00004FDB 3E 00 1525 LD A,BYTE3 fflush\r
+ 00004FDD 21 A9 6B 1526 LD HL,LWRD fflush\r
+ 00004FE0 CD 5E 81 1527 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00004FE3 FD E1 1528 POP IY\r
+ 00004FE5 C3 1F 81 1529 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00004FE8 1530 Component_linkstringtable:\r
+ 00004FE8 C5 1531 PUSH BC\r
+ 00004FE9 FD E5 1532 PUSH IY\r
+ 00004FEB DD E5 1533 PUSH IX\r
+ 00004FED D5 1534 PUSH DE\r
+ 00004FEE DD E1 1535 POP IX\r
+ 00004FF0 21 15 00 1536 LD HL,21\r
+ 00004FF3 19 1537 ADD HL,DE\r
+ 00004FF4 46 1538 LD B,(HL)\r
+ 00004FF5 23 1539 INC HL\r
+ 00004FF6 66 1540 LD H,(HL)\r
+ 00004FF7 68 1541 LD L,B\r
+ 00004FF8 E5 1542 PUSH HL\r
+ 00004FF9 FD E1 1543 POP IY\r
+ 00004FFB 21 20 00 1544 LD HL,32\r
+ 00004FFE 19 1545 ADD HL,DE\r
+ 00004FFF 46 1546 LD B,(HL)\r
+ 00005000 23 1547 INC HL\r
+ 00005001 66 1548 LD H,(HL)\r
+ 00005002 68 1549 LD L,B\r
+ 00005003 01 00 90 1550 LD BC,36864\r
+ 00005006 3E 80 1551 LD A,128\r
+ 00005008 AC 1552 XOR H\r
+ 00005009 67 1553 LD H,A\r
+ 0000500A ED 42 1554 SBC HL,BC\r
+ 0000500C 30 2E 1555 JR NC,?0102\r
+ 0000500E DD 4E 20 1556 LD C,(IX+32)\r
+ 00005011 DD 46 21 1557 LD B,(IX+33)\r
+ 00005014 21 00 00 1558 LD HL,0\r
+ 00005017 CD A6 81 1559 CALL LWRD ?SS_CMP_L02\r
+ 0000501A 30 20 1560 JR NC,?0102\r
+ 0000501C 1561 ?0104:\r
+ 0000501C 1562 ?0103:\r
+ 0000501C 1563 ?0101:\r
+ 0000501C DD 6E 20 1564 LD L,(IX+32)\r
+ 0000501F DD 66 21 1565 LD H,(IX+33)\r
+ 00005022 29 1566 ADD HL,HL\r
+ 00005023 E5 1567 PUSH HL\r
+ 00005024 21 08 00 1568 LD HL,8\r
+ 00005027 ED 4B C0 86 1569 LD BC,(global)\r
+ 0000502B 09 1570 ADD HL,BC\r
+ 0000502C 4E 1571 LD C,(HL)\r
+ 0000502D 23 1572 INC HL\r
+ 0000502E 46 1573 LD B,(HL)\r
+ 0000502F E1 1574 POP HL\r
+ 00005030 09 1575 ADD HL,BC\r
+ 00005031 2B 1576 DEC HL\r
+ 00005032 2B 1577 DEC HL\r
+ 00005033 46 1578 LD B,(HL)\r
+ 00005034 DD 70 20 1579 LD (IX+32),B\r
+ 00005037 23 1580 INC HL\r
+ 00005038 66 1581 LD H,(HL)\r
+ 00005039 DD 74 21 1582 LD (IX+33),H\r
+ 0000503C 1583 ?0102:\r
+ 0000503C DD 6E 22 1584 LD L,(IX+34)\r
+ 0000503F DD 66 23 1585 LD H,(IX+35)\r
+ 00005042 01 00 90 1586 LD BC,36864\r
+ 00005045 3E 80 1587 LD A,128\r
+ 00005047 AC 1588 XOR H\r
+ 00005048 67 1589 LD H,A\r
+ 00005049 ED 42 1590 SBC HL,BC\r
+ 0000504B 30 2E 1591 JR NC,?0106\r
+ 0000504D DD 4E 22 1592 LD C,(IX+34)\r
+ 00005050 DD 46 23 1593 LD B,(IX+35)\r
+ 00005053 21 00 00 1594 LD HL,0\r
+ 00005056 CD A6 81 1595 CALL LWRD ?SS_CMP_L02\r
+ 00005059 30 20 1596 JR NC,?0106\r
+ 0000505B 1597 ?0108:\r
+ 0000505B 1598 ?0107:\r
+ 0000505B 1599 ?0105:\r
+ 0000505B DD 6E 22 1600 LD L,(IX+34)\r
+ 0000505E DD 66 23 1601 LD H,(IX+35)\r
+ 00005061 29 1602 ADD HL,HL\r
+ 00005062 E5 1603 PUSH HL\r
+ 00005063 21 08 00 1604 LD HL,8\r
+ 00005066 ED 4B C0 86 1605 LD BC,(global)\r
+ 0000506A 09 1606 ADD HL,BC\r
+ 0000506B 4E 1607 LD C,(HL)\r
+ 0000506C 23 1608 INC HL\r
+ 0000506D 46 1609 LD B,(HL)\r
+ 0000506E E1 1610 POP HL\r
+ 0000506F 09 1611 ADD HL,BC\r
+ 00005070 2B 1612 DEC HL\r
+ 00005071 2B 1613 DEC HL\r
+ 00005072 46 1614 LD B,(HL)\r
+ 00005073 DD 70 22 1615 LD (IX+34),B\r
+ 00005076 23 1616 INC HL\r
+ 00005077 66 1617 LD H,(HL)\r
+ 00005078 DD 74 23 1618 LD (IX+35),H\r
+ 0000507B 1619 ?0106:\r
+ 0000507B 1620 ?0110:\r
+ 0000507B FD E5 1621 PUSH IY\r
+ 0000507D E1 1622 POP HL\r
+ 0000507E 7D 1623 LD A,L\r
+ 0000507F B4 1624 OR H\r
+ 00005080 28 16 1625 JR Z,?0109\r
+ 00005082 1626 ?0111:\r
+ 00005082 FD E5 1627 PUSH IY\r
+ 00005084 D1 1628 POP DE\r
+ 00005085 3E 00 1629 LD A,BYTE3 Component_linkstringtable\r
+ 00005087 21 E8 4F 1630 LD HL,LWRD Component_linkstringtable\r
+ 0000508A CD 5E 81 1631 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000508D FD 6E 13 1632 LD L,(IY+19)\r
+ 00005090 FD 66 14 1633 LD H,(IY+20)\r
+ 00005093 E5 1634 PUSH HL\r
+ 00005094 FD E1 1635 POP IY\r
+ 00005096 18 E3 1636 JR ?0106\r
+ 00005098 1637 ?0109:\r
+ 00005098 C3 27 48 1638 JP LWRD ?0411\r
+ 0000509B 1639 Window_handler:\r
+ 0000509B CD 88 81 1640 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 0000509E D0 FF 1641 DEFW 65488\r
+ 000050A0 FD E5 1642 PUSH IY\r
+ 000050A2 AF 1643 XOR A\r
+ 000050A3 DD 77 FA 1644 LD (IX-6),A\r
+ 000050A6 DD 77 FB 1645 LD (IX-5),A\r
+ 000050A9 DD 77 FC 1646 LD (IX-4),A\r
+ 000050AC DD 77 FD 1647 LD (IX-3),A\r
+ 000050AF 59 1648 LD E,C\r
+ 000050B0 50 1649 LD D,B\r
+ 000050B1 CD 6B 81 1650 CALL LWRD ?S_V_SWITCH_L06\r
+ 000050B4 08 00 1651 DEFW 8\r
+ 000050B6 01 00 1652 DEFW 1\r
+ 000050B8 02 00 1653 DEFW 2\r
+ 000050BA 03 00 1654 DEFW 3\r
+ 000050BC 02 01 1655 DEFW 258\r
+ 000050BE 03 01 1656 DEFW 259\r
+ 000050C0 04 01 1657 DEFW 260\r
+ 000050C2 05 01 1658 DEFW 261\r
+ 000050C4 01 04 1659 DEFW 1025\r
+ 000050C6 34 53 1660 DEFW ?0159\r
+ 000050C8 A2 52 1661 DEFW ?0153\r
+ 000050CA 35 52 1662 DEFW ?0144\r
+ 000050CC 61 52 1663 DEFW ?0145\r
+ 000050CE A9 51 1664 DEFW ?0142\r
+ 000050D0 BA 51 1665 DEFW ?0143\r
+ 000050D2 6E 51 1666 DEFW ?0131\r
+ 000050D4 09 51 1667 DEFW ?0119\r
+ 000050D6 D8 50 1668 DEFW ?0113\r
+ 000050D8 1669 ?0113:\r
+ 000050D8 21 15 00 1670 LD HL,21\r
+ 000050DB DD 4E 02 1671 LD C,(IX+2)\r
+ 000050DE DD 46 03 1672 LD B,(IX+3)\r
+ 000050E1 09 1673 ADD HL,BC\r
+ 000050E2 46 1674 LD B,(HL)\r
+ 000050E3 23 1675 INC HL\r
+ 000050E4 66 1676 LD H,(HL)\r
+ 000050E5 68 1677 LD L,B\r
+ 000050E6 1678 ?0344:\r
+ 000050E6 E5 1679 PUSH HL\r
+ 000050E7 FD E1 1680 POP IY\r
+ 000050E9 1681 ?0115:\r
+ 000050E9 7D 1682 LD A,L\r
+ 000050EA B4 1683 OR H\r
+ 000050EB 28 19 1684 JR Z,?0114\r
+ 000050ED 1685 ?0116:\r
+ 000050ED FD CB 0A 46 1686 BIT 0,(IY+10)\r
+ 000050F1 28 0B 1687 JR Z,?0118\r
+ 000050F3 1688 ?0117:\r
+ 000050F3 DD 6E 0A 1689 LD L,(IX+10)\r
+ 000050F6 DD 66 0B 1690 LD H,(IX+11)\r
+ 000050F9 E5 1691 PUSH HL\r
+ 000050FA CD 39 53 1692 CALL LWRD ?0462\r
+ 000050FD E1 1693 POP HL\r
+ 000050FE 1694 ?0118:\r
+ 000050FE FD 6E 13 1695 LD L,(IY+19)\r
+ 00005101 FD 66 14 1696 LD H,(IY+20)\r
+ 00005104 18 E0 1697 JR ?0344\r
+ 00005106 1698 ?0114:\r
+ 00005106 C3 34 53 1699 JP LWRD ?0159\r
+ 00005109 1700 ?0119:\r
+ 00005109 21 15 00 1701 LD HL,21\r
+ 0000510C DD 4E 02 1702 LD C,(IX+2)\r
+ 0000510F DD 46 03 1703 LD B,(IX+3)\r
+ 00005112 09 1704 ADD HL,BC\r
+ 00005113 46 1705 LD B,(HL)\r
+ 00005114 23 1706 INC HL\r
+ 00005115 66 1707 LD H,(HL)\r
+ 00005116 68 1708 LD L,B\r
+ 00005117 1709 ?0348:\r
+ 00005117 E5 1710 PUSH HL\r
+ 00005118 FD E1 1711 POP IY\r
+ 0000511A 1712 ?0121:\r
+ 0000511A 7D 1713 LD A,L\r
+ 0000511B B4 1714 OR H\r
+ 0000511C 28 4D 1715 JR Z,?0120\r
+ 0000511E 1716 ?0122:\r
+ 0000511E FD CB 0A 46 1717 BIT 0,(IY+10)\r
+ 00005122 28 38 1718 JR Z,?0126\r
+ 00005124 1719 ?0123:\r
+ 00005124 DD 6E 0A 1720 LD L,(IX+10)\r
+ 00005127 DD 66 0B 1721 LD H,(IX+11)\r
+ 0000512A E5 1722 PUSH HL\r
+ 0000512B CD 39 53 1723 CALL LWRD ?0462\r
+ 0000512E E1 1724 POP HL\r
+ 0000512F DD 6E 0A 1725 LD L,(IX+10)\r
+ 00005132 DD 66 0B 1726 LD H,(IX+11)\r
+ 00005135 E5 1727 PUSH HL\r
+ 00005136 01 03 00 1728 LD BC,3\r
+ 00005139 CD 3F 53 1729 CALL LWRD ?0463\r
+ 0000513C E1 1730 POP HL\r
+ 0000513D FD 7E 0A 1731 LD A,(IY+10)\r
+ 00005140 E6 22 1732 AND 34\r
+ 00005142 6F 1733 LD L,A\r
+ 00005143 26 00 1734 LD H,0\r
+ 00005145 3E 22 1735 LD A,34\r
+ 00005147 AD 1736 XOR L\r
+ 00005148 20 12 1737 JR NZ,?0126\r
+ 0000514A FD 4E 10 1738 LD C,(IY+16)\r
+ 0000514D 44 1739 LD B,H\r
+ 0000514E DD 6E 0A 1740 LD L,(IX+10)\r
+ 00005151 DD 66 0B 1741 LD H,(IX+11)\r
+ 00005154 ED 42 1742 SBC HL,BC\r
+ 00005156 20 04 1743 JR NZ,?0126\r
+ 00005158 1744 ?0128:\r
+ 00005158 1745 ?0127:\r
+ 00005158 1746 ?0125:\r
+ 00005158 FD 21 00 00 1747 LD IY,0\r
+ 0000515C 1748 ?0126:\r
+ 0000515C 1749 ?0124:\r
+ 0000515C FD E5 1750 PUSH IY\r
+ 0000515E E1 1751 POP HL\r
+ 0000515F 7D 1752 LD A,L\r
+ 00005160 B4 1753 OR H\r
+ 00005161 28 B7 1754 JR Z,?0121\r
+ 00005163 1755 ?0129:\r
+ 00005163 FD 6E 13 1756 LD L,(IY+19)\r
+ 00005166 FD 66 14 1757 LD H,(IY+20)\r
+ 00005169 18 AC 1758 JR ?0348\r
+ 0000516B 1759 ?0130:\r
+ 0000516B 1760 ?0120:\r
+ 0000516B C3 34 53 1761 JP LWRD ?0159\r
+ 0000516E 1762 ?0131:\r
+ 0000516E DD 6E 02 1763 LD L,(IX+2)\r
+ 00005171 DD 66 03 1764 LD H,(IX+3)\r
+ 00005174 E5 1765 PUSH HL\r
+ 00005175 FD E1 1766 POP IY\r
+ 00005177 21 0A 00 1767 LD HL,10\r
+ 0000517A DD 4E 02 1768 LD C,(IX+2)\r
+ 0000517D DD 46 03 1769 LD B,(IX+3)\r
+ 00005180 09 1770 ADD HL,BC\r
+ 00005181 CB 46 1771 BIT 0,(HL)\r
+ 00005183 28 21 1772 JR Z,?0139\r
+ 00005185 1773 ?0132:\r
+ 00005185 FD CB 0A 6E 1774 BIT 5,(IY+10)\r
+ 00005189 28 1B 1775 JR Z,?0139\r
+ 0000518B FD 4E 10 1776 LD C,(IY+16)\r
+ 0000518E 47 1777 LD B,A\r
+ 0000518F DD 6E 0A 1778 LD L,(IX+10)\r
+ 00005192 DD 66 0B 1779 LD H,(IX+11)\r
+ 00005195 A7 1780 AND A\r
+ 00005196 ED 42 1781 SBC HL,BC\r
+ 00005198 20 0C 1782 JR NZ,?0139\r
+ 0000519A 1783 ?0137:\r
+ 0000519A 1784 ?0136:\r
+ 0000519A 1785 ?0134:\r
+ 0000519A FD 6E 26 1786 LD L,(IY+38)\r
+ 0000519D FD 66 27 1787 LD H,(IY+39)\r
+ 000051A0 FD E5 1788 PUSH IY\r
+ 000051A2 D1 1789 POP DE\r
+ 000051A3 CD 5E 53 1790 CALL LWRD ?0474\r
+ 000051A6 1791 ?0138:\r
+ 000051A6 1792 ?0139:\r
+ 000051A6 1793 ?0135:\r
+ 000051A6 1794 ?0133:\r
+ 000051A6 1795 ?0140:\r
+ 000051A6 1796 ?0141:\r
+ 000051A6 C3 34 53 1797 JP LWRD ?0159\r
+ 000051A9 1798 ?0142:\r
+ 000051A9 DD 5E 02 1799 LD E,(IX+2)\r
+ 000051AC 4B 1800 LD C,E\r
+ 000051AD DD 56 03 1801 LD D,(IX+3)\r
+ 000051B0 42 1802 LD B,D\r
+ 000051B1 21 1A 00 1803 LD HL,26\r
+ 000051B4 CD 5D 53 1804 CALL LWRD ?0475\r
+ 000051B7 C3 34 53 1805 JP LWRD ?0159\r
+ 000051BA 1806 ?0143:\r
+ 000051BA 21 0A 00 1807 LD HL,10\r
+ 000051BD DD 4E 02 1808 LD C,(IX+2)\r
+ 000051C0 DD 46 03 1809 LD B,(IX+3)\r
+ 000051C3 09 1810 ADD HL,BC\r
+ 000051C4 7E 1811 LD A,(HL)\r
+ 000051C5 E6 FC 1812 AND 252\r
+ 000051C7 77 1813 LD (HL),A\r
+ 000051C8 21 2E 00 1814 LD HL,46\r
+ 000051CB 39 1815 ADD HL,SP\r
+ 000051CC E5 1816 PUSH HL\r
+ 000051CD 2B 1817 DEC HL\r
+ 000051CE 2B 1818 DEC HL\r
+ 000051CF 4D 1819 LD C,L\r
+ 000051D0 44 1820 LD B,H\r
+ 000051D1 DD 5E 02 1821 LD E,(IX+2)\r
+ 000051D4 DD 56 03 1822 LD D,(IX+3)\r
+ 000051D7 CD 55 53 1823 CALL LWRD ?0466\r
+ 000051DA E1 1824 POP HL\r
+ 000051DB 21 08 00 1825 LD HL,8\r
+ 000051DE DD 4E 02 1826 LD C,(IX+2)\r
+ 000051E1 DD 46 03 1827 LD B,(IX+3)\r
+ 000051E4 09 1828 ADD HL,BC\r
+ 000051E5 5E 1829 LD E,(HL)\r
+ 000051E6 23 1830 INC HL\r
+ 000051E7 56 1831 LD D,(HL)\r
+ 000051E8 D5 1832 PUSH DE\r
+ 000051E9 21 06 00 1833 LD HL,6\r
+ 000051EC 09 1834 ADD HL,BC\r
+ 000051ED 5E 1835 LD E,(HL)\r
+ 000051EE 23 1836 INC HL\r
+ 000051EF 56 1837 LD D,(HL)\r
+ 000051F0 D5 1838 PUSH DE\r
+ 000051F1 DD 6E FC 1839 LD L,(IX-4)\r
+ 000051F4 DD 66 FD 1840 LD H,(IX-3)\r
+ 000051F7 E5 1841 PUSH HL\r
+ 000051F8 DD 4E FA 1842 LD C,(IX-6)\r
+ 000051FB DD 46 FB 1843 LD B,(IX-5)\r
+ 000051FE 11 00 00 1844 LD DE,0\r
+ 00005201 CD BB 48 1845 CALL LWRD ?0471\r
+ 00005204 E1 1846 POP HL\r
+ 00005205 E1 1847 POP HL\r
+ 00005206 E1 1848 POP HL\r
+ 00005207 21 00 00 1849 LD HL,0\r
+ 0000520A E5 1850 PUSH HL\r
+ 0000520B 2E 11 1851 LD L,17\r
+ 0000520D DD 5E 02 1852 LD E,(IX+2)\r
+ 00005210 DD 56 03 1853 LD D,(IX+3)\r
+ 00005213 19 1854 ADD HL,DE\r
+ 00005214 5E 1855 LD E,(HL)\r
+ 00005215 23 1856 INC HL\r
+ 00005216 56 1857 LD D,(HL)\r
+ 00005217 21 11 00 1858 LD HL,17\r
+ 0000521A DD 4E 02 1859 LD C,(IX+2)\r
+ 0000521D DD 46 03 1860 LD B,(IX+3)\r
+ 00005220 09 1861 ADD HL,BC\r
+ 00005221 46 1862 LD B,(HL)\r
+ 00005222 23 1863 INC HL\r
+ 00005223 66 1864 LD H,(HL)\r
+ 00005224 68 1865 LD L,B\r
+ 00005225 01 17 00 1866 LD BC,23\r
+ 00005228 09 1867 ADD HL,BC\r
+ 00005229 4E 1868 LD C,(HL)\r
+ 0000522A 23 1869 INC HL\r
+ 0000522B 46 1870 LD B,(HL)\r
+ 0000522C 23 1871 INC HL\r
+ 0000522D 7E 1872 LD A,(HL)\r
+ 0000522E 69 1873 LD L,C\r
+ 0000522F 60 1874 LD H,B\r
+ 00005230 01 03 01 1875 LD BC,259\r
+ 00005233 18 29 1876 JR ?0347\r
+ 00005235 1877 ?0144:\r
+ 00005235 21 11 00 1878 LD HL,17\r
+ 00005238 DD 4E 02 1879 LD C,(IX+2)\r
+ 0000523B DD 46 03 1880 LD B,(IX+3)\r
+ 0000523E 09 1881 ADD HL,BC\r
+ 0000523F 56 1882 LD D,(HL)\r
+ 00005240 23 1883 INC HL\r
+ 00005241 66 1884 LD H,(HL)\r
+ 00005242 6A 1885 LD L,D\r
+ 00005243 E5 1886 PUSH HL\r
+ 00005244 FD E1 1887 POP IY\r
+ 00005246 59 1888 LD E,C\r
+ 00005247 50 1889 LD D,B\r
+ 00005248 CD 58 4F 1890 CALL LWRD ?0453\r
+ 0000524B 21 00 00 1891 LD HL,0\r
+ 0000524E E5 1892 PUSH HL\r
+ 0000524F 01 03 01 1893 LD BC,259\r
+ 00005252 FD E5 1894 PUSH IY\r
+ 00005254 D1 1895 POP DE\r
+ 00005255 FD 7E 19 1896 LD A,(IY+25)\r
+ 00005258 FD 6E 17 1897 LD L,(IY+23)\r
+ 0000525B FD 66 18 1898 LD H,(IY+24)\r
+ 0000525E 1899 ?0347:\r
+ 0000525E C3 30 53 1900 JP LWRD ?0346\r
+ 00005261 1901 ?0145:\r
+ 00005261 21 15 00 1902 LD HL,21\r
+ 00005264 DD 4E 02 1903 LD C,(IX+2)\r
+ 00005267 DD 46 03 1904 LD B,(IX+3)\r
+ 0000526A 09 1905 ADD HL,BC\r
+ 0000526B 46 1906 LD B,(HL)\r
+ 0000526C 23 1907 INC HL\r
+ 0000526D 66 1908 LD H,(HL)\r
+ 0000526E 68 1909 LD L,B\r
+ 0000526F 1910 ?0345:\r
+ 0000526F E5 1911 PUSH HL\r
+ 00005270 FD E1 1912 POP IY\r
+ 00005272 1913 ?0147:\r
+ 00005272 7D 1914 LD A,L\r
+ 00005273 B4 1915 OR H\r
+ 00005274 28 29 1916 JR Z,?0146\r
+ 00005276 1917 ?0148:\r
+ 00005276 DD 6E 0A 1918 LD L,(IX+10)\r
+ 00005279 DD 66 0B 1919 LD H,(IX+11)\r
+ 0000527C FD E5 1920 PUSH IY\r
+ 0000527E C1 1921 POP BC\r
+ 0000527F ED 42 1922 SBC HL,BC\r
+ 00005281 28 14 1923 JR Z,?0150\r
+ 00005283 FD CB 0A 5E 1924 BIT 3,(IY+10)\r
+ 00005287 28 0E 1925 JR Z,?0150\r
+ 00005289 1926 ?0152:\r
+ 00005289 1927 ?0151:\r
+ 00005289 1928 ?0149:\r
+ 00005289 DD 6E 0A 1929 LD L,(IX+10)\r
+ 0000528C DD 66 0B 1930 LD H,(IX+11)\r
+ 0000528F E5 1931 PUSH HL\r
+ 00005290 01 03 02 1932 LD BC,515\r
+ 00005293 CD 3F 53 1933 CALL LWRD ?0463\r
+ 00005296 E1 1934 POP HL\r
+ 00005297 1935 ?0150:\r
+ 00005297 FD 6E 13 1936 LD L,(IY+19)\r
+ 0000529A FD 66 14 1937 LD H,(IY+20)\r
+ 0000529D 18 D0 1938 JR ?0345\r
+ 0000529F 1939 ?0146:\r
+ 0000529F C3 34 53 1940 JP LWRD ?0159\r
+ 000052A2 1941 ?0153:\r
+ 000052A2 21 11 00 1942 LD HL,17\r
+ 000052A5 DD 4E 02 1943 LD C,(IX+2)\r
+ 000052A8 DD 46 03 1944 LD B,(IX+3)\r
+ 000052AB 09 1945 ADD HL,BC\r
+ 000052AC 7E 1946 LD A,(HL)\r
+ 000052AD 23 1947 INC HL\r
+ 000052AE B6 1948 OR (HL)\r
+ 000052AF 20 0E 1949 JR NZ,?0155\r
+ 000052B1 1950 ?0154:\r
+ 000052B1 21 04 00 1951 LD HL,4\r
+ 000052B4 ED 4B C0 86 1952 LD BC,(global)\r
+ 000052B8 09 1953 ADD HL,BC\r
+ 000052B9 36 01 1954 LD (HL),1\r
+ 000052BB 23 1955 INC HL\r
+ 000052BC 77 1956 LD (HL),A\r
+ 000052BD 18 75 1957 JR ?0159\r
+ 000052BF 1958 ?0155:\r
+ 000052BF 21 0A 00 1959 LD HL,10\r
+ 000052C2 09 1960 ADD HL,BC\r
+ 000052C3 23 1961 INC HL\r
+ 000052C4 CB 6E 1962 BIT 5,(HL)\r
+ 000052C6 20 28 1963 JR NZ,?0158\r
+ 000052C8 1964 ?0157:\r
+ 000052C8 DD 6E 0A 1965 LD L,(IX+10)\r
+ 000052CB DD 66 0B 1966 LD H,(IX+11)\r
+ 000052CE E5 1967 PUSH HL\r
+ 000052CF 21 11 00 1968 LD HL,17\r
+ 000052D2 59 1969 LD E,C\r
+ 000052D3 50 1970 LD D,B\r
+ 000052D4 19 1971 ADD HL,DE\r
+ 000052D5 5E 1972 LD E,(HL)\r
+ 000052D6 23 1973 INC HL\r
+ 000052D7 56 1974 LD D,(HL)\r
+ 000052D8 21 11 00 1975 LD HL,17\r
+ 000052DB 09 1976 ADD HL,BC\r
+ 000052DC 46 1977 LD B,(HL)\r
+ 000052DD 23 1978 INC HL\r
+ 000052DE 66 1979 LD H,(HL)\r
+ 000052DF 68 1980 LD L,B\r
+ 000052E0 01 17 00 1981 LD BC,23\r
+ 000052E3 09 1982 ADD HL,BC\r
+ 000052E4 4E 1983 LD C,(HL)\r
+ 000052E5 23 1984 INC HL\r
+ 000052E6 46 1985 LD B,(HL)\r
+ 000052E7 23 1986 INC HL\r
+ 000052E8 7E 1987 LD A,(HL)\r
+ 000052E9 69 1988 LD L,C\r
+ 000052EA 60 1989 LD H,B\r
+ 000052EB 01 01 04 1990 LD BC,1025\r
+ 000052EE 18 40 1991 JR ?0346\r
+ 000052F0 1992 ?0158:\r
+ 000052F0 21 11 00 1993 LD HL,17\r
+ 000052F3 09 1994 ADD HL,BC\r
+ 000052F4 56 1995 LD D,(HL)\r
+ 000052F5 23 1996 INC HL\r
+ 000052F6 66 1997 LD H,(HL)\r
+ 000052F7 6A 1998 LD L,D\r
+ 000052F8 E5 1999 PUSH HL\r
+ 000052F9 FD E1 2000 POP IY\r
+ 000052FB 11 0A 00 2001 LD DE,10\r
+ 000052FE 19 2002 ADD HL,DE\r
+ 000052FF 7E 2003 LD A,(HL)\r
+ 00005300 F6 03 2004 OR 3\r
+ 00005302 77 2005 LD (HL),A\r
+ 00005303 6A 2006 LD L,D\r
+ 00005304 62 2007 LD H,D\r
+ 00005305 E5 2008 PUSH HL\r
+ 00005306 23 2009 INC HL\r
+ 00005307 E5 2010 PUSH HL\r
+ 00005308 4A 2011 LD C,D\r
+ 00005309 42 2012 LD B,D\r
+ 0000530A FD E5 2013 PUSH IY\r
+ 0000530C D1 2014 POP DE\r
+ 0000530D 3E 00 2015 LD A,BYTE3 Component_changestate_children\r
+ 0000530F 21 7F 4F 2016 LD HL,LWRD Component_changestate_children\r
+ 00005312 CD 5E 81 2017 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005315 E1 2018 POP HL\r
+ 00005316 E1 2019 POP HL\r
+ 00005317 21 00 00 2020 LD HL,0\r
+ 0000531A E5 2021 PUSH HL\r
+ 0000531B DD 5E 02 2022 LD E,(IX+2)\r
+ 0000531E 4B 2023 LD C,E\r
+ 0000531F DD 56 03 2024 LD D,(IX+3)\r
+ 00005322 42 2025 LD B,D\r
+ 00005323 2E 17 2026 LD L,23\r
+ 00005325 09 2027 ADD HL,BC\r
+ 00005326 4E 2028 LD C,(HL)\r
+ 00005327 23 2029 INC HL\r
+ 00005328 46 2030 LD B,(HL)\r
+ 00005329 23 2031 INC HL\r
+ 0000532A 7E 2032 LD A,(HL)\r
+ 0000532B 69 2033 LD L,C\r
+ 0000532C 60 2034 LD H,B\r
+ 0000532D 01 05 01 2035 LD BC,261\r
+ 00005330 2036 ?0346:\r
+ 00005330 CD 5E 81 2037 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005333 E1 2038 POP HL\r
+ 00005334 2039 ?0159:\r
+ 00005334 2040 ?0156:\r
+ 00005334 2041 ?0112:\r
+ 00005334 FD E1 2042 POP IY\r
+ 00005336 C3 1F 81 2043 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00005339 2044 ?0462:\r
+ 00005339 DD 4E 04 2045 LD C,(IX+4)\r
+ 0000533C DD 46 05 2046 LD B,(IX+5)\r
+ 0000533F 2047 ?0463:\r
+ 0000533F FD E5 2048 PUSH IY\r
+ 00005341 D1 2049 POP DE\r
+ 00005342 FD 7E 19 2050 LD A,(IY+25)\r
+ 00005345 FD 6E 17 2051 LD L,(IY+23)\r
+ 00005348 FD 66 18 2052 LD H,(IY+24)\r
+ 0000534B C3 5E 81 2053 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000534E 2054 ?0467:\r
+ 0000534E 23 2055 INC HL\r
+ 0000534F 23 2056 INC HL\r
+ 00005350 2057 ?0468:\r
+ 00005350 4D 2058 LD C,L\r
+ 00005351 44 2059 LD B,H\r
+ 00005352 DD E5 2060 PUSH IX\r
+ 00005354 D1 2061 POP DE\r
+ 00005355 2062 ?0466:\r
+ 00005355 3E 00 2063 LD A,BYTE3 Component_findXY\r
+ 00005357 21 13 4D 2064 LD HL,LWRD Component_findXY\r
+ 0000535A C3 5E 81 2065 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000535D 2066 ?0475:\r
+ 0000535D 09 2067 ADD HL,BC\r
+ 0000535E 2068 ?0474:\r
+ 0000535E 4E 2069 LD C,(HL)\r
+ 0000535F 23 2070 INC HL\r
+ 00005360 46 2071 LD B,(HL)\r
+ 00005361 23 2072 INC HL\r
+ 00005362 7E 2073 LD A,(HL)\r
+ 00005363 69 2074 LD L,C\r
+ 00005364 60 2075 LD H,B\r
+ 00005365 C3 5E 81 2076 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005368 2077 Window_paint:\r
+ 00005368 CD 88 81 2078 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 0000536B FC FF 2079 DEFW -4\r
+ 0000536D FD E5 2080 PUSH IY\r
+ 0000536F DD 6E 02 2081 LD L,(IX+2)\r
+ 00005372 DD 66 03 2082 LD H,(IX+3)\r
+ 00005375 E5 2083 PUSH HL\r
+ 00005376 FD E1 2084 POP IY\r
+ 00005378 AF 2085 XOR A\r
+ 00005379 DD 77 FE 2086 LD (IX-2),A\r
+ 0000537C DD 77 FF 2087 LD (IX-1),A\r
+ 0000537F DD 77 FC 2088 LD (IX-4),A\r
+ 00005382 DD 77 FD 2089 LD (IX-3),A\r
+ 00005385 21 0A 00 2090 LD HL,10\r
+ 00005388 ED 4B C0 86 2091 LD BC,(global)\r
+ 0000538C 09 2092 ADD HL,BC\r
+ 0000538D 7E 2093 LD A,(HL)\r
+ 0000538E 23 2094 INC HL\r
+ 0000538F 66 2095 LD H,(HL)\r
+ 00005390 6F 2096 LD L,A\r
+ 00005391 46 2097 LD B,(HL)\r
+ 00005392 23 2098 INC HL\r
+ 00005393 66 2099 LD H,(HL)\r
+ 00005394 68 2100 LD L,B\r
+ 00005395 FD 4E 0E 2101 LD C,(IY+14)\r
+ 00005398 FD 46 0F 2102 LD B,(IY+15)\r
+ 0000539B A7 2103 AND A\r
+ 0000539C ED 42 2104 SBC HL,BC\r
+ 0000539E 28 09 2105 JR Z,?0161\r
+ 000053A0 2106 ?0160:\r
+ 000053A0 FD 5E 0E 2107 LD E,(IY+14)\r
+ 000053A3 FD 56 0F 2108 LD D,(IY+15)\r
+ 000053A6 CD ED 54 2109 CALL LWRD ?0472\r
+ 000053A9 2110 ?0161:\r
+ 000053A9 FD CB 0A 46 2111 BIT 0,(IY+10)\r
+ 000053AD CA A5 54 2112 JP Z,?0163\r
+ 000053B0 2113 ?0162:\r
+ 000053B0 21 02 00 2114 LD HL,2\r
+ 000053B3 39 2115 ADD HL,SP\r
+ 000053B4 E5 2116 PUSH HL\r
+ 000053B5 23 2117 INC HL\r
+ 000053B6 23 2118 INC HL\r
+ 000053B7 4D 2119 LD C,L\r
+ 000053B8 44 2120 LD B,H\r
+ 000053B9 FD E5 2121 PUSH IY\r
+ 000053BB D1 2122 POP DE\r
+ 000053BC CD 55 53 2123 CALL LWRD ?0466\r
+ 000053BF E1 2124 POP HL\r
+ 000053C0 CD 09 4D 2125 CALL LWRD ?0477\r
+ 000053C3 DD 4E FC 2126 LD C,(IX-4)\r
+ 000053C6 DD 46 FD 2127 LD B,(IX-3)\r
+ 000053C9 DD 5E FE 2128 LD E,(IX-2)\r
+ 000053CC DD 56 FF 2129 LD D,(IX-1)\r
+ 000053CF 3E 00 2130 LD A,BYTE3 Move\r
+ 000053D1 21 6C 46 2131 LD HL,LWRD Move\r
+ 000053D4 CD 5E 81 2132 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000053D7 FD 4E 08 2133 LD C,(IY+8)\r
+ 000053DA FD 46 09 2134 LD B,(IY+9)\r
+ 000053DD FD 5E 06 2135 LD E,(IY+6)\r
+ 000053E0 FD 56 07 2136 LD D,(IY+7)\r
+ 000053E3 3E 00 2137 LD A,BYTE3 ClearRect\r
+ 000053E5 21 AB 46 2138 LD HL,LWRD ClearRect\r
+ 000053E8 CD 5E 81 2139 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000053EB FD 6E 08 2140 LD L,(IY+8)\r
+ 000053EE FD 66 09 2141 LD H,(IY+9)\r
+ 000053F1 E5 2142 PUSH HL\r
+ 000053F2 FD 6E 06 2143 LD L,(IY+6)\r
+ 000053F5 FD 66 07 2144 LD H,(IY+7)\r
+ 000053F8 E5 2145 PUSH HL\r
+ 000053F9 DD 6E FC 2146 LD L,(IX-4)\r
+ 000053FC DD 66 FD 2147 LD H,(IX-3)\r
+ 000053FF E5 2148 PUSH HL\r
+ 00005400 DD 4E FE 2149 LD C,(IX-2)\r
+ 00005403 DD 46 FF 2150 LD B,(IX-1)\r
+ 00005406 11 00 00 2151 LD DE,0\r
+ 00005409 CD BB 48 2152 CALL LWRD ?0471\r
+ 0000540C E1 2153 POP HL\r
+ 0000540D E1 2154 POP HL\r
+ 0000540E E1 2155 POP HL\r
+ 0000540F FD 5E 20 2156 LD E,(IY+32)\r
+ 00005412 FD 56 21 2157 LD D,(IY+33)\r
+ 00005415 21 0A 00 2158 LD HL,10\r
+ 00005418 ED 4B C0 86 2159 LD BC,(global)\r
+ 0000541C 09 2160 ADD HL,BC\r
+ 0000541D 7E 2161 LD A,(HL)\r
+ 0000541E 23 2162 INC HL\r
+ 0000541F 66 2163 LD H,(HL)\r
+ 00005420 6F 2164 LD L,A\r
+ 00005421 CD AA 54 2165 CALL LWRD ?0455\r
+ 00005424 DD 4E FC 2166 LD C,(IX-4)\r
+ 00005427 DD 46 FD 2167 LD B,(IX-3)\r
+ 0000542A 09 2168 ADD HL,BC\r
+ 0000542B 11 04 00 2169 LD DE,4\r
+ 0000542E 19 2170 ADD HL,DE\r
+ 0000542F 4D 2171 LD C,L\r
+ 00005430 44 2172 LD B,H\r
+ 00005431 CD B8 54 2173 CALL LWRD ?0459\r
+ 00005434 7E 2174 LD A,(HL)\r
+ 00005435 23 2175 INC HL\r
+ 00005436 66 2176 LD H,(HL)\r
+ 00005437 6F 2177 LD L,A\r
+ 00005438 01 05 00 2178 LD BC,5\r
+ 0000543B 09 2179 ADD HL,BC\r
+ 0000543C 4E 2180 LD C,(HL)\r
+ 0000543D 23 2181 INC HL\r
+ 0000543E 46 2182 LD B,(HL)\r
+ 0000543F 23 2183 INC HL\r
+ 00005440 7E 2184 LD A,(HL)\r
+ 00005441 69 2185 LD L,C\r
+ 00005442 60 2186 LD H,B\r
+ 00005443 CD DC 49 2187 CALL LWRD ?0444\r
+ 00005446 01 FC FF 2188 LD BC,65532\r
+ 00005449 09 2189 ADD HL,BC\r
+ 0000544A 4D 2190 LD C,L\r
+ 0000544B 44 2191 LD B,H\r
+ 0000544C FD 5E 06 2192 LD E,(IY+6)\r
+ 0000544F FD 56 07 2193 LD D,(IY+7)\r
+ 00005452 3E 00 2194 LD A,BYTE3 DrawRectNC\r
+ 00005454 21 EE 46 2195 LD HL,LWRD DrawRectNC\r
+ 00005457 CD 5E 81 2196 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000545A DD 4E FC 2197 LD C,(IX-4)\r
+ 0000545D DD 46 FD 2198 LD B,(IX-3)\r
+ 00005460 CD B8 54 2199 CALL LWRD ?0459\r
+ 00005463 46 2200 LD B,(HL)\r
+ 00005464 23 2201 INC HL\r
+ 00005465 66 2202 LD H,(HL)\r
+ 00005466 68 2203 LD L,B\r
+ 00005467 CD AA 54 2204 CALL LWRD ?0455\r
+ 0000546A 01 05 00 2205 LD BC,5\r
+ 0000546D 09 2206 ADD HL,BC\r
+ 0000546E 4D 2207 LD C,L\r
+ 0000546F 44 2208 LD B,H\r
+ 00005470 FD 5E 06 2209 LD E,(IY+6)\r
+ 00005473 FD 56 07 2210 LD D,(IY+7)\r
+ 00005476 3E 00 2211 LD A,BYTE3 FillRect\r
+ 00005478 21 33 47 2212 LD HL,LWRD FillRect\r
+ 0000547B CD 5E 81 2213 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000547E 21 0E 00 2214 LD HL,14\r
+ 00005481 DD 4E FC 2215 LD C,(IX-4)\r
+ 00005484 DD 46 FD 2216 LD B,(IX-3)\r
+ 00005487 09 2217 ADD HL,BC\r
+ 00005488 4D 2218 LD C,L\r
+ 00005489 44 2219 LD B,H\r
+ 0000548A DD 5E FE 2220 LD E,(IX-2)\r
+ 0000548D DD 56 FF 2221 LD D,(IX-1)\r
+ 00005490 13 2222 INC DE\r
+ 00005491 13 2223 INC DE\r
+ 00005492 3E 00 2224 LD A,BYTE3 Move\r
+ 00005494 21 6C 46 2225 LD HL,LWRD Move\r
+ 00005497 CD D5 54 2226 CALL LWRD ?0460\r
+ 0000549A FD E5 2227 PUSH IY\r
+ 0000549C D1 2228 POP DE\r
+ 0000549D 3E 00 2229 LD A,BYTE3 Component_paint\r
+ 0000549F 21 CD 4C 2230 LD HL,LWRD Component_paint\r
+ 000054A2 CD 5E 81 2231 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000054A5 2232 ?0163:\r
+ 000054A5 FD E1 2233 POP IY\r
+ 000054A7 C3 1F 81 2234 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000054AA 2235 ?0455:\r
+ 000054AA 01 05 00 2236 LD BC,5\r
+ 000054AD 09 2237 ADD HL,BC\r
+ 000054AE 4E 2238 LD C,(HL)\r
+ 000054AF 23 2239 INC HL\r
+ 000054B0 46 2240 LD B,(HL)\r
+ 000054B1 23 2241 INC HL\r
+ 000054B2 7E 2242 LD A,(HL)\r
+ 000054B3 69 2243 LD L,C\r
+ 000054B4 60 2244 LD H,B\r
+ 000054B5 C3 5E 81 2245 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 000054B8 2246 ?0459:\r
+ 000054B8 DD 5E FE 2247 LD E,(IX-2)\r
+ 000054BB DD 56 FF 2248 LD D,(IX-1)\r
+ 000054BE 3E 00 2249 LD A,BYTE3 Move\r
+ 000054C0 21 6C 46 2250 LD HL,LWRD Move\r
+ 000054C3 CD 5E 81 2251 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000054C6 FD 5E 20 2252 LD E,(IY+32)\r
+ 000054C9 FD 56 21 2253 LD D,(IY+33)\r
+ 000054CC 21 0A 00 2254 LD HL,10\r
+ 000054CF ED 4B C0 86 2255 LD BC,(global)\r
+ 000054D3 09 2256 ADD HL,BC\r
+ 000054D4 C9 2257 RET\r
+ 000054D5 2258 ?0460:\r
+ 000054D5 CD 5E 81 2259 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000054D8 FD 5E 20 2260 LD E,(IY+32)\r
+ 000054DB FD 56 21 2261 LD D,(IY+33)\r
+ 000054DE 3E 00 2262 LD A,BYTE3 Text\r
+ 000054E0 21 02 48 2263 LD HL,LWRD Text\r
+ 000054E3 CD 5E 81 2264 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000054E6 C9 2265 RET\r
+ 000054E7 2266 ?0473:\r
+ 000054E7 DD 5E 0E 2267 LD E,(IX+14)\r
+ 000054EA DD 56 0F 2268 LD D,(IX+15)\r
+ 000054ED 2269 ?0472:\r
+ 000054ED 3E 00 2270 LD A,BYTE3 setCurrentFont\r
+ 000054EF 21 6E 49 2271 LD HL,LWRD setCurrentFont\r
+ 000054F2 C3 5E 81 2272 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 000054F5 2273 Root_paint:\r
+ 000054F5 CD 52 81 2274 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 000054F8 CD 09 4D 2275 CALL LWRD ?0477\r
+ 000054FB CD A0 48 2276 CALL LWRD ?0461\r
+ 000054FE CD 5E 81 2277 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005501 01 80 00 2278 LD BC,128\r
+ 00005504 58 2279 LD E,B\r
+ 00005505 50 2280 LD D,B\r
+ 00005506 3E 00 2281 LD A,BYTE3 GrayRect\r
+ 00005508 21 BD 47 2282 LD HL,LWRD GrayRect\r
+ 0000550B CD 5E 81 2283 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000550E 21 80 00 2284 LD HL,128\r
+ 00005511 E5 2285 PUSH HL\r
+ 00005512 6C 2286 LD L,H\r
+ 00005513 E5 2287 PUSH HL\r
+ 00005514 E5 2288 PUSH HL\r
+ 00005515 CD B8 48 2289 CALL LWRD ?0470\r
+ 00005518 E1 2290 POP HL\r
+ 00005519 E1 2291 POP HL\r
+ 0000551A E1 2292 POP HL\r
+ 0000551B DD 5E 02 2293 LD E,(IX+2)\r
+ 0000551E DD 56 03 2294 LD D,(IX+3)\r
+ 00005521 3E 00 2295 LD A,BYTE3 Component_paint\r
+ 00005523 21 CD 4C 2296 LD HL,LWRD Component_paint\r
+ 00005526 CD 5E 81 2297 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005529 C3 1F 81 2298 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 0000552C 2299 Window_add:\r
+ 0000552C CD 52 81 2300 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 0000552F 3E 00 2301 LD A,BYTE3 Component_add\r
+ 00005531 21 6F 4C 2302 LD HL,LWRD Component_add\r
+ 00005534 CD 5E 81 2303 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005537 C3 1F 81 2304 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 0000553A 2305 Window_new:\r
+ 0000553A CD 88 81 2306 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 0000553D 00 00 2307 DEFW 0\r
+ 0000553F FD E5 2308 PUSH IY\r
+ 00005541 DD 6E 0C 2309 LD L,(IX+12)\r
+ 00005544 DD 66 0D 2310 LD H,(IX+13)\r
+ 00005547 E5 2311 PUSH HL\r
+ 00005548 DD 6E 0A 2312 LD L,(IX+10)\r
+ 0000554B DD 66 0B 2313 LD H,(IX+11)\r
+ 0000554E E5 2314 PUSH HL\r
+ 0000554F CD 7E 55 2315 CALL LWRD ?0438\r
+ 00005552 F1 2316 POP AF\r
+ 00005553 F1 2317 POP AF\r
+ 00005554 E5 2318 PUSH HL\r
+ 00005555 FD E1 2319 POP IY\r
+ 00005557 01 17 00 2320 LD BC,23\r
+ 0000555A 09 2321 ADD HL,BC\r
+ 0000555B 36 9B 2322 LD (HL),LOW(Window_handler)\r
+ 0000555D 23 2323 INC HL\r
+ 0000555E 36 50 2324 LD (HL),HIGH(Window_handler)\r
+ 00005560 23 2325 INC HL\r
+ 00005561 36 00 2326 LD (HL),BYTE3 Window_handler\r
+ 00005563 FD 36 1A 68 2327 LD (IY+26),LOW(Window_paint)\r
+ 00005567 FD 36 1B 53 2328 LD (IY+27),HIGH(Window_paint)\r
+ 0000556B FD 36 1C 00 2329 LD (IY+28),BYTE3 Window_paint\r
+ 0000556F FD 36 1D 2C 2330 LD (IY+29),LOW(Window_add)\r
+ 00005573 FD 36 1E 55 2331 LD (IY+30),HIGH(Window_add)\r
+ 00005577 FD 36 1F 00 2332 LD (IY+31),BYTE3 Window_add\r
+ 0000557B C3 1A 4C 2333 JP LWRD ?0418\r
+ 0000557E 2334 ?0438:\r
+ 0000557E DD 5E 02 2335 LD E,(IX+2)\r
+ 00005581 DD 56 03 2336 LD D,(IX+3)\r
+ 00005584 3E 00 2337 LD A,BYTE3 Component_new\r
+ 00005586 21 78 4B 2338 LD HL,LWRD Component_new\r
+ 00005589 C3 5E 81 2339 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000558C 2340 Button_handler:\r
+ 0000558C CD 52 81 2341 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 0000558F FD E5 2342 PUSH IY\r
+ 00005591 D5 2343 PUSH DE\r
+ 00005592 FD E1 2344 POP IY\r
+ 00005594 DD 6E 0A 2345 LD L,(IX+10)\r
+ 00005597 DD 66 0B 2346 LD H,(IX+11)\r
+ 0000559A E5 2347 PUSH HL\r
+ 0000559B 3E 00 2348 LD A,BYTE3 Window_handler\r
+ 0000559D 21 9B 50 2349 LD HL,LWRD Window_handler\r
+ 000055A0 CD 5E 81 2350 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000055A3 E1 2351 POP HL\r
+ 000055A4 3E 03 2352 LD A,3\r
+ 000055A6 DD AE 04 2353 XOR (IX+4)\r
+ 000055A9 DD B6 05 2354 OR (IX+5)\r
+ 000055AC 20 3E 2355 JR NZ,?0169\r
+ 000055AE FD 4E 10 2356 LD C,(IY+16)\r
+ 000055B1 47 2357 LD B,A\r
+ 000055B2 DD 6E 0A 2358 LD L,(IX+10)\r
+ 000055B5 DD 66 0B 2359 LD H,(IX+11)\r
+ 000055B8 ED 42 2360 SBC HL,BC\r
+ 000055BA 20 30 2361 JR NZ,?0169\r
+ 000055BC FD 7E 0A 2362 LD A,(IY+10)\r
+ 000055BF E6 03 2363 AND 3\r
+ 000055C1 28 29 2364 JR Z,?0169\r
+ 000055C3 2365 ?0167:\r
+ 000055C3 2366 ?0166:\r
+ 000055C3 2367 ?0164:\r
+ 000055C3 DD 6E 0A 2368 LD L,(IX+10)\r
+ 000055C6 DD 66 0B 2369 LD H,(IX+11)\r
+ 000055C9 E5 2370 PUSH HL\r
+ 000055CA FD 5E 11 2371 LD E,(IY+17)\r
+ 000055CD FD 56 12 2372 LD D,(IY+18)\r
+ 000055D0 FD 6E 11 2373 LD L,(IY+17)\r
+ 000055D3 FD 66 12 2374 LD H,(IY+18)\r
+ 000055D6 0E 17 2375 LD C,23\r
+ 000055D8 CD 19 56 2376 CALL LWRD ?0464\r
+ 000055DB E1 2377 POP HL\r
+ 000055DC FD CB 0A 66 2378 BIT 4,(IY+10)\r
+ 000055E0 28 0A 2379 JR Z,?0169\r
+ 000055E2 2380 ?0168:\r
+ 000055E2 FD 4E 10 2381 LD C,(IY+16)\r
+ 000055E5 06 00 2382 LD B,0\r
+ 000055E7 C5 2383 PUSH BC\r
+ 000055E8 CD 27 56 2384 CALL LWRD ?0469\r
+ 000055EB E1 2385 POP HL\r
+ 000055EC 2386 ?0169:\r
+ 000055EC 2387 ?0165:\r
+ 000055EC 21 01 02 2388 LD HL,513\r
+ 000055EF DD 4E 04 2389 LD C,(IX+4)\r
+ 000055F2 DD 46 05 2390 LD B,(IX+5)\r
+ 000055F5 A7 2391 AND A\r
+ 000055F6 ED 42 2392 SBC HL,BC\r
+ 000055F8 20 0B 2393 JR NZ,?0171\r
+ 000055FA 2394 ?0170:\r
+ 000055FA DD 6E 0A 2395 LD L,(IX+10)\r
+ 000055FD DD 66 0B 2396 LD H,(IX+11)\r
+ 00005600 E5 2397 PUSH HL\r
+ 00005601 CD 0A 56 2398 CALL LWRD ?0465\r
+ 00005604 E1 2399 POP HL\r
+ 00005605 2400 ?0171:\r
+ 00005605 FD E1 2401 POP IY\r
+ 00005607 C3 1F 81 2402 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 0000560A 2403 ?0465:\r
+ 0000560A FD 5E 11 2404 LD E,(IY+17)\r
+ 0000560D FD 56 12 2405 LD D,(IY+18)\r
+ 00005610 FD 6E 11 2406 LD L,(IY+17)\r
+ 00005613 FD 66 12 2407 LD H,(IY+18)\r
+ 00005616 01 17 00 2408 LD BC,23\r
+ 00005619 2409 ?0464:\r
+ 00005619 09 2410 ADD HL,BC\r
+ 0000561A 4E 2411 LD C,(HL)\r
+ 0000561B 23 2412 INC HL\r
+ 0000561C 46 2413 LD B,(HL)\r
+ 0000561D 23 2414 INC HL\r
+ 0000561E 7E 2415 LD A,(HL)\r
+ 0000561F 69 2416 LD L,C\r
+ 00005620 60 2417 LD H,B\r
+ 00005621 01 01 02 2418 LD BC,513\r
+ 00005624 C3 5E 81 2419 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005627 2420 ?0469:\r
+ 00005627 FD 5E 11 2421 LD E,(IY+17)\r
+ 0000562A FD 56 12 2422 LD D,(IY+18)\r
+ 0000562D FD 6E 11 2423 LD L,(IY+17)\r
+ 00005630 FD 66 12 2424 LD H,(IY+18)\r
+ 00005633 0E 17 2425 LD C,23\r
+ 00005635 09 2426 ADD HL,BC\r
+ 00005636 4E 2427 LD C,(HL)\r
+ 00005637 23 2428 INC HL\r
+ 00005638 46 2429 LD B,(HL)\r
+ 00005639 23 2430 INC HL\r
+ 0000563A 7E 2431 LD A,(HL)\r
+ 0000563B 69 2432 LD L,C\r
+ 0000563C 60 2433 LD H,B\r
+ 0000563D 01 04 01 2434 LD BC,260\r
+ 00005640 C3 5E 81 2435 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005643 2436 Button_drawtext:\r
+ 00005643 CD 52 81 2437 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00005646 FD E5 2438 PUSH IY\r
+ 00005648 D5 2439 PUSH DE\r
+ 00005649 FD E1 2440 POP IY\r
+ 0000564B 21 0A 00 2441 LD HL,10\r
+ 0000564E 19 2442 ADD HL,DE\r
+ 0000564F CB 76 2443 BIT 6,(HL)\r
+ 00005651 FD 5E 20 2444 LD E,(IY+32)\r
+ 00005654 FD 56 21 2445 LD D,(IY+33)\r
+ 00005657 21 0A 00 2446 LD HL,10\r
+ 0000565A ED 4B C0 86 2447 LD BC,(global)\r
+ 0000565E 09 2448 ADD HL,BC\r
+ 0000565F 7E 2449 LD A,(HL)\r
+ 00005660 23 2450 INC HL\r
+ 00005661 66 2451 LD H,(HL)\r
+ 00005662 6F 2452 LD L,A\r
+ 00005663 01 05 00 2453 LD BC,5\r
+ 00005666 09 2454 ADD HL,BC\r
+ 00005667 4E 2455 LD C,(HL)\r
+ 00005668 23 2456 INC HL\r
+ 00005669 46 2457 LD B,(HL)\r
+ 0000566A 23 2458 INC HL\r
+ 0000566B 7E 2459 LD A,(HL)\r
+ 0000566C 69 2460 LD L,C\r
+ 0000566D 60 2461 LD H,B\r
+ 0000566E 28 53 2462 JR Z,?0173\r
+ 00005670 2463 ?0172:\r
+ 00005670 CD 5E 81 2464 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005673 29 2465 ADD HL,HL\r
+ 00005674 4D 2466 LD C,L\r
+ 00005675 44 2467 LD B,H\r
+ 00005676 FD 6E 08 2468 LD L,(IY+8)\r
+ 00005679 FD 66 09 2469 LD H,(IY+9)\r
+ 0000567C A7 2470 AND A\r
+ 0000567D ED 42 2471 SBC HL,BC\r
+ 0000567F CD F0 56 2472 CALL LWRD ?0480\r
+ 00005682 0E 0C 2473 LD C,12\r
+ 00005684 09 2474 ADD HL,BC\r
+ 00005685 E5 2475 PUSH HL\r
+ 00005686 FD 5E 20 2476 LD E,(IY+32)\r
+ 00005689 FD 56 21 2477 LD D,(IY+33)\r
+ 0000568C 21 0A 00 2478 LD HL,10\r
+ 0000568F ED 4B C0 86 2479 LD BC,(global)\r
+ 00005693 09 2480 ADD HL,BC\r
+ 00005694 7E 2481 LD A,(HL)\r
+ 00005695 23 2482 INC HL\r
+ 00005696 66 2483 LD H,(HL)\r
+ 00005697 6F 2484 LD L,A\r
+ 00005698 CD B0 49 2485 CALL LWRD ?0442\r
+ 0000569B C1 2486 POP BC\r
+ 0000569C CD D5 54 2487 CALL LWRD ?0460\r
+ 0000569F FD 5E 08 2488 LD E,(IY+8)\r
+ 000056A2 FD 56 09 2489 LD D,(IY+9)\r
+ 000056A5 CD F1 56 2490 CALL LWRD ?0481\r
+ 000056A8 0E 0A 2491 LD C,10\r
+ 000056AA 09 2492 ADD HL,BC\r
+ 000056AB E5 2493 PUSH HL\r
+ 000056AC FD 5E 22 2494 LD E,(IY+34)\r
+ 000056AF FD 56 23 2495 LD D,(IY+35)\r
+ 000056B2 69 2496 LD L,C\r
+ 000056B3 60 2497 LD H,B\r
+ 000056B4 CD A7 49 2498 CALL LWRD ?0443\r
+ 000056B7 C1 2499 POP BC\r
+ 000056B8 CD 5E 81 2500 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000056BB FD 5E 22 2501 LD E,(IY+34)\r
+ 000056BE FD 56 23 2502 LD D,(IY+35)\r
+ 000056C1 18 20 2503 JR ?0350\r
+ 000056C3 2504 ?0173:\r
+ 000056C3 CD DC 49 2505 CALL LWRD ?0444\r
+ 000056C6 CD F0 56 2506 CALL LWRD ?0480\r
+ 000056C9 0E 0D 2507 LD C,13\r
+ 000056CB 09 2508 ADD HL,BC\r
+ 000056CC E5 2509 PUSH HL\r
+ 000056CD FD 5E 20 2510 LD E,(IY+32)\r
+ 000056D0 FD 56 21 2511 LD D,(IY+33)\r
+ 000056D3 21 0A 00 2512 LD HL,10\r
+ 000056D6 CD A7 49 2513 CALL LWRD ?0443\r
+ 000056D9 C1 2514 POP BC\r
+ 000056DA CD 5E 81 2515 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000056DD FD 5E 20 2516 LD E,(IY+32)\r
+ 000056E0 FD 56 21 2517 LD D,(IY+33)\r
+ 000056E3 2518 ?0350:\r
+ 000056E3 3E 00 2519 LD A,BYTE3 Text\r
+ 000056E5 21 02 48 2520 LD HL,LWRD Text\r
+ 000056E8 2521 ?0424:\r
+ 000056E8 CD 5E 81 2522 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000056EB 2523 ?0174:\r
+ 000056EB FD E1 2524 POP IY\r
+ 000056ED C3 1F 81 2525 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000056F0 2526 ?0480:\r
+ 000056F0 EB 2527 EX DE,HL\r
+ 000056F1 2528 ?0481:\r
+ 000056F1 01 02 00 2529 LD BC,2\r
+ 000056F4 CD C1 81 2530 CALL LWRD ?SS_DIV_L02\r
+ 000056F7 DD 6E 0A 2531 LD L,(IX+10)\r
+ 000056FA DD 66 0B 2532 LD H,(IX+11)\r
+ 000056FD 19 2533 ADD HL,DE\r
+ 000056FE C9 2534 RET\r
+ 000056FF 2535 Button_paint:\r
+ 000056FF C5 2536 PUSH BC\r
+ 00005700 DD E5 2537 PUSH IX\r
+ 00005702 F5 2538 PUSH AF\r
+ 00005703 F5 2539 PUSH AF\r
+ 00005704 D5 2540 PUSH DE\r
+ 00005705 DD E1 2541 POP IX\r
+ 00005707 21 02 00 2542 LD HL,2\r
+ 0000570A 39 2543 ADD HL,SP\r
+ 0000570B AF 2544 XOR A\r
+ 0000570C 77 2545 LD (HL),A\r
+ 0000570D 23 2546 INC HL\r
+ 0000570E 77 2547 LD (HL),A\r
+ 0000570F 2B 2548 DEC HL\r
+ 00005710 2B 2549 DEC HL\r
+ 00005711 2B 2550 DEC HL\r
+ 00005712 77 2551 LD (HL),A\r
+ 00005713 23 2552 INC HL\r
+ 00005714 77 2553 LD (HL),A\r
+ 00005715 21 0A 00 2554 LD HL,10\r
+ 00005718 ED 4B C0 86 2555 LD BC,(global)\r
+ 0000571C 09 2556 ADD HL,BC\r
+ 0000571D 7E 2557 LD A,(HL)\r
+ 0000571E 23 2558 INC HL\r
+ 0000571F 66 2559 LD H,(HL)\r
+ 00005720 6F 2560 LD L,A\r
+ 00005721 46 2561 LD B,(HL)\r
+ 00005722 23 2562 INC HL\r
+ 00005723 66 2563 LD H,(HL)\r
+ 00005724 68 2564 LD L,B\r
+ 00005725 E5 2565 PUSH HL\r
+ 00005726 21 0E 00 2566 LD HL,14\r
+ 00005729 19 2567 ADD HL,DE\r
+ 0000572A 4E 2568 LD C,(HL)\r
+ 0000572B 23 2569 INC HL\r
+ 0000572C 46 2570 LD B,(HL)\r
+ 0000572D E1 2571 POP HL\r
+ 0000572E A7 2572 AND A\r
+ 0000572F ED 42 2573 SBC HL,BC\r
+ 00005731 28 03 2574 JR Z,?0176\r
+ 00005733 2575 ?0175:\r
+ 00005733 CD E7 54 2576 CALL LWRD ?0473\r
+ 00005736 2577 ?0176:\r
+ 00005736 DD CB 0A 46 2578 BIT 0,(IX+10)\r
+ 0000573A CA CF 57 2579 JP Z,?0178\r
+ 0000573D 2580 ?0177:\r
+ 0000573D 21 00 00 2581 LD HL,0\r
+ 00005740 39 2582 ADD HL,SP\r
+ 00005741 E5 2583 PUSH HL\r
+ 00005742 CD 4E 53 2584 CALL LWRD ?0467\r
+ 00005745 E1 2585 POP HL\r
+ 00005746 21 00 00 2586 LD HL,0\r
+ 00005749 39 2587 ADD HL,SP\r
+ 0000574A CD D7 57 2588 CALL LWRD ?0457\r
+ 0000574D CD 5E 81 2589 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005750 DD 6E 08 2590 LD L,(IX+8)\r
+ 00005753 DD 66 09 2591 LD H,(IX+9)\r
+ 00005756 E5 2592 PUSH HL\r
+ 00005757 DD 6E 06 2593 LD L,(IX+6)\r
+ 0000575A DD 66 07 2594 LD H,(IX+7)\r
+ 0000575D E5 2595 PUSH HL\r
+ 0000575E 21 04 00 2596 LD HL,4\r
+ 00005761 39 2597 ADD HL,SP\r
+ 00005762 4E 2598 LD C,(HL)\r
+ 00005763 23 2599 INC HL\r
+ 00005764 46 2600 LD B,(HL)\r
+ 00005765 C5 2601 PUSH BC\r
+ 00005766 23 2602 INC HL\r
+ 00005767 4E 2603 LD C,(HL)\r
+ 00005768 23 2604 INC HL\r
+ 00005769 46 2605 LD B,(HL)\r
+ 0000576A DD CB 0A 4E 2606 BIT 1,(IX+10)\r
+ 0000576E 28 07 2607 JR Z,?0180\r
+ 00005770 DD 5E 10 2608 LD E,(IX+16)\r
+ 00005773 16 00 2609 LD D,0\r
+ 00005775 18 03 2610 JR ?0181\r
+ 00005777 2611 ?0180:\r
+ 00005777 11 00 00 2612 LD DE,0\r
+ 0000577A 2613 ?0181:\r
+ 0000577A CD BB 48 2614 CALL LWRD ?0471\r
+ 0000577D E1 2615 POP HL\r
+ 0000577E E1 2616 POP HL\r
+ 0000577F E1 2617 POP HL\r
+ 00005780 DD 7E 0A 2618 LD A,(IX+10)\r
+ 00005783 E6 82 2619 AND 130\r
+ 00005785 28 1C 2620 JR Z,?0183\r
+ 00005787 DD 7E 0A 2621 LD A,(IX+10)\r
+ 0000578A E6 82 2622 AND 130\r
+ 0000578C EE 82 2623 XOR 130\r
+ 0000578E 28 13 2624 JR Z,?0183\r
+ 00005790 2625 ?0185:\r
+ 00005790 2626 ?0184:\r
+ 00005790 2627 ?0182:\r
+ 00005790 DD 4E 08 2628 LD C,(IX+8)\r
+ 00005793 DD 46 09 2629 LD B,(IX+9)\r
+ 00005796 DD 5E 06 2630 LD E,(IX+6)\r
+ 00005799 DD 56 07 2631 LD D,(IX+7)\r
+ 0000579C 3E 00 2632 LD A,BYTE3 FillRectNC\r
+ 0000579E 21 78 47 2633 LD HL,LWRD FillRectNC\r
+ 000057A1 18 11 2634 JR ?0353\r
+ 000057A3 2635 ?0183:\r
+ 000057A3 DD 4E 08 2636 LD C,(IX+8)\r
+ 000057A6 DD 46 09 2637 LD B,(IX+9)\r
+ 000057A9 DD 5E 06 2638 LD E,(IX+6)\r
+ 000057AC DD 56 07 2639 LD D,(IX+7)\r
+ 000057AF 3E 00 2640 LD A,BYTE3 DrawRectNC\r
+ 000057B1 21 EE 46 2641 LD HL,LWRD DrawRectNC\r
+ 000057B4 2642 ?0353:\r
+ 000057B4 CD 5E 81 2643 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000057B7 2644 ?0186:\r
+ 000057B7 21 00 00 2645 LD HL,0\r
+ 000057BA 39 2646 ADD HL,SP\r
+ 000057BB 4E 2647 LD C,(HL)\r
+ 000057BC 23 2648 INC HL\r
+ 000057BD 46 2649 LD B,(HL)\r
+ 000057BE C5 2650 PUSH BC\r
+ 000057BF 23 2651 INC HL\r
+ 000057C0 4E 2652 LD C,(HL)\r
+ 000057C1 23 2653 INC HL\r
+ 000057C2 46 2654 LD B,(HL)\r
+ 000057C3 DD E5 2655 PUSH IX\r
+ 000057C5 D1 2656 POP DE\r
+ 000057C6 3E 00 2657 LD A,BYTE3 Button_drawtext\r
+ 000057C8 21 43 56 2658 LD HL,LWRD Button_drawtext\r
+ 000057CB CD 5E 81 2659 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000057CE E1 2660 POP HL\r
+ 000057CF 2661 ?0178:\r
+ 000057CF E1 2662 POP HL\r
+ 000057D0 E1 2663 POP HL\r
+ 000057D1 DD E1 2664 POP IX\r
+ 000057D3 C1 2665 POP BC\r
+ 000057D4 C3 25 81 2666 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 000057D7 2667 ?0457:\r
+ 000057D7 4E 2668 LD C,(HL)\r
+ 000057D8 23 2669 INC HL\r
+ 000057D9 46 2670 LD B,(HL)\r
+ 000057DA 23 2671 INC HL\r
+ 000057DB 2672 ?0458:\r
+ 000057DB 5E 2673 LD E,(HL)\r
+ 000057DC 23 2674 INC HL\r
+ 000057DD 56 2675 LD D,(HL)\r
+ 000057DE 3E 00 2676 LD A,BYTE3 Move\r
+ 000057E0 21 6C 46 2677 LD HL,LWRD Move\r
+ 000057E3 CD 5E 81 2678 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000057E6 DD 4E 08 2679 LD C,(IX+8)\r
+ 000057E9 DD 46 09 2680 LD B,(IX+9)\r
+ 000057EC DD 5E 06 2681 LD E,(IX+6)\r
+ 000057EF DD 56 07 2682 LD D,(IX+7)\r
+ 000057F2 3E 00 2683 LD A,BYTE3 ClearRect\r
+ 000057F4 21 AB 46 2684 LD HL,LWRD ClearRect\r
+ 000057F7 C9 2685 RET\r
+ 000057F8 2686 Button_add:\r
+ 000057F8 CD 52 81 2687 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 000057FB C3 1F 81 2688 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000057FE 2689 Button_new:\r
+ 000057FE CD 88 81 2690 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00005801 00 00 2691 DEFW 0\r
+ 00005803 FD E5 2692 PUSH IY\r
+ 00005805 DD 6E 0C 2693 LD L,(IX+12)\r
+ 00005808 DD 66 0D 2694 LD H,(IX+13)\r
+ 0000580B E5 2695 PUSH HL\r
+ 0000580C DD 6E 0A 2696 LD L,(IX+10)\r
+ 0000580F DD 66 0B 2697 LD H,(IX+11)\r
+ 00005812 E5 2698 PUSH HL\r
+ 00005813 CD 7E 55 2699 CALL LWRD ?0438\r
+ 00005816 F1 2700 POP AF\r
+ 00005817 F1 2701 POP AF\r
+ 00005818 E5 2702 PUSH HL\r
+ 00005819 FD E1 2703 POP IY\r
+ 0000581B 01 0A 00 2704 LD BC,10\r
+ 0000581E 09 2705 ADD HL,BC\r
+ 0000581F 7E 2706 LD A,(HL)\r
+ 00005820 F6 03 2707 OR 3\r
+ 00005822 77 2708 LD (HL),A\r
+ 00005823 DD 46 0E 2709 LD B,(IX+14)\r
+ 00005826 FD 70 10 2710 LD (IY+16),B\r
+ 00005829 FD 36 17 8C 2711 LD (IY+23),LOW(Button_handler)\r
+ 0000582D FD 36 18 55 2712 LD (IY+24),HIGH(Button_handler)\r
+ 00005831 FD 36 19 00 2713 LD (IY+25),BYTE3 Button_handler\r
+ 00005835 FD 36 1A FF 2714 LD (IY+26),LOW(Button_paint)\r
+ 00005839 FD 36 1B 56 2715 LD (IY+27),HIGH(Button_paint)\r
+ 0000583D FD 36 1C 00 2716 LD (IY+28),BYTE3 Button_paint\r
+ 00005841 FD 36 1D F8 2717 LD (IY+29),LOW(Button_add)\r
+ 00005845 FD 36 1E 57 2718 LD (IY+30),HIGH(Button_add)\r
+ 00005849 FD 36 1F 00 2719 LD (IY+31),BYTE3 Button_add\r
+ 0000584D C3 1A 4C 2720 JP LWRD ?0418\r
+ 00005850 2721 ToggleButton_handler:\r
+ 00005850 CD 52 81 2722 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00005853 FD E5 2723 PUSH IY\r
+ 00005855 D5 2724 PUSH DE\r
+ 00005856 FD E1 2725 POP IY\r
+ 00005858 DD 6E 0A 2726 LD L,(IX+10)\r
+ 0000585B DD 66 0B 2727 LD H,(IX+11)\r
+ 0000585E E5 2728 PUSH HL\r
+ 0000585F 3E 00 2729 LD A,BYTE3 Window_handler\r
+ 00005861 21 9B 50 2730 LD HL,LWRD Window_handler\r
+ 00005864 CD 5E 81 2731 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005867 E1 2732 POP HL\r
+ 00005868 3E 03 2733 LD A,3\r
+ 0000586A DD AE 04 2734 XOR (IX+4)\r
+ 0000586D DD B6 05 2735 OR (IX+5)\r
+ 00005870 20 5C 2736 JR NZ,?0192\r
+ 00005872 FD 4E 10 2737 LD C,(IY+16)\r
+ 00005875 47 2738 LD B,A\r
+ 00005876 DD 6E 0A 2739 LD L,(IX+10)\r
+ 00005879 DD 66 0B 2740 LD H,(IX+11)\r
+ 0000587C ED 42 2741 SBC HL,BC\r
+ 0000587E 20 4E 2742 JR NZ,?0192\r
+ 00005880 FD 7E 0A 2743 LD A,(IY+10)\r
+ 00005883 E6 03 2744 AND 3\r
+ 00005885 28 47 2745 JR Z,?0192\r
+ 00005887 2746 ?0190:\r
+ 00005887 2747 ?0189:\r
+ 00005887 2748 ?0187:\r
+ 00005887 FD 7E 0A 2749 LD A,(IY+10)\r
+ 0000588A EE 04 2750 XOR 4\r
+ 0000588C FD 77 0A 2751 LD (IY+10),A\r
+ 0000588F DD 6E 0A 2752 LD L,(IX+10)\r
+ 00005892 DD 66 0B 2753 LD H,(IX+11)\r
+ 00005895 E5 2754 PUSH HL\r
+ 00005896 FD 5E 11 2755 LD E,(IY+17)\r
+ 00005899 FD 56 12 2756 LD D,(IY+18)\r
+ 0000589C FD 6E 11 2757 LD L,(IY+17)\r
+ 0000589F FD 66 12 2758 LD H,(IY+18)\r
+ 000058A2 0E 17 2759 LD C,23\r
+ 000058A4 09 2760 ADD HL,BC\r
+ 000058A5 4E 2761 LD C,(HL)\r
+ 000058A6 23 2762 INC HL\r
+ 000058A7 46 2763 LD B,(HL)\r
+ 000058A8 23 2764 INC HL\r
+ 000058A9 7E 2765 LD A,(HL)\r
+ 000058AA 69 2766 LD L,C\r
+ 000058AB 60 2767 LD H,B\r
+ 000058AC 01 02 02 2768 LD BC,514\r
+ 000058AF CD 5E 81 2769 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000058B2 E1 2770 POP HL\r
+ 000058B3 21 00 00 2771 LD HL,0\r
+ 000058B6 E5 2772 PUSH HL\r
+ 000058B7 01 03 01 2773 LD BC,259\r
+ 000058BA CD 3F 53 2774 CALL LWRD ?0463\r
+ 000058BD E1 2775 POP HL\r
+ 000058BE FD CB 0A 66 2776 BIT 4,(IY+10)\r
+ 000058C2 28 0A 2777 JR Z,?0192\r
+ 000058C4 2778 ?0191:\r
+ 000058C4 FD 4E 10 2779 LD C,(IY+16)\r
+ 000058C7 06 00 2780 LD B,0\r
+ 000058C9 C5 2781 PUSH BC\r
+ 000058CA CD 27 56 2782 CALL LWRD ?0469\r
+ 000058CD E1 2783 POP HL\r
+ 000058CE 2784 ?0192:\r
+ 000058CE 2785 ?0188:\r
+ 000058CE 21 01 02 2786 LD HL,513\r
+ 000058D1 DD 4E 04 2787 LD C,(IX+4)\r
+ 000058D4 DD 46 05 2788 LD B,(IX+5)\r
+ 000058D7 A7 2789 AND A\r
+ 000058D8 ED 42 2790 SBC HL,BC\r
+ 000058DA 20 0B 2791 JR NZ,?0194\r
+ 000058DC 2792 ?0193:\r
+ 000058DC DD 6E 0A 2793 LD L,(IX+10)\r
+ 000058DF DD 66 0B 2794 LD H,(IX+11)\r
+ 000058E2 E5 2795 PUSH HL\r
+ 000058E3 CD 0A 56 2796 CALL LWRD ?0465\r
+ 000058E6 E1 2797 POP HL\r
+ 000058E7 2798 ?0194:\r
+ 000058E7 FD E1 2799 POP IY\r
+ 000058E9 C3 1F 81 2800 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000058EC 2801 ToggleButton_paint:\r
+ 000058EC C5 2802 PUSH BC\r
+ 000058ED DD E5 2803 PUSH IX\r
+ 000058EF F5 2804 PUSH AF\r
+ 000058F0 F5 2805 PUSH AF\r
+ 000058F1 D5 2806 PUSH DE\r
+ 000058F2 DD E1 2807 POP IX\r
+ 000058F4 21 02 00 2808 LD HL,2\r
+ 000058F7 39 2809 ADD HL,SP\r
+ 000058F8 AF 2810 XOR A\r
+ 000058F9 77 2811 LD (HL),A\r
+ 000058FA 23 2812 INC HL\r
+ 000058FB 77 2813 LD (HL),A\r
+ 000058FC 2B 2814 DEC HL\r
+ 000058FD 2B 2815 DEC HL\r
+ 000058FE 2B 2816 DEC HL\r
+ 000058FF 77 2817 LD (HL),A\r
+ 00005900 23 2818 INC HL\r
+ 00005901 77 2819 LD (HL),A\r
+ 00005902 21 0A 00 2820 LD HL,10\r
+ 00005905 ED 4B C0 86 2821 LD BC,(global)\r
+ 00005909 09 2822 ADD HL,BC\r
+ 0000590A 7E 2823 LD A,(HL)\r
+ 0000590B 23 2824 INC HL\r
+ 0000590C 66 2825 LD H,(HL)\r
+ 0000590D 6F 2826 LD L,A\r
+ 0000590E 46 2827 LD B,(HL)\r
+ 0000590F 23 2828 INC HL\r
+ 00005910 66 2829 LD H,(HL)\r
+ 00005911 68 2830 LD L,B\r
+ 00005912 E5 2831 PUSH HL\r
+ 00005913 21 0E 00 2832 LD HL,14\r
+ 00005916 19 2833 ADD HL,DE\r
+ 00005917 4E 2834 LD C,(HL)\r
+ 00005918 23 2835 INC HL\r
+ 00005919 46 2836 LD B,(HL)\r
+ 0000591A E1 2837 POP HL\r
+ 0000591B A7 2838 AND A\r
+ 0000591C ED 42 2839 SBC HL,BC\r
+ 0000591E 28 03 2840 JR Z,?0196\r
+ 00005920 2841 ?0195:\r
+ 00005920 CD E7 54 2842 CALL LWRD ?0473\r
+ 00005923 2843 ?0196:\r
+ 00005923 DD CB 0A 46 2844 BIT 0,(IX+10)\r
+ 00005927 CA D5 59 2845 JP Z,?0198\r
+ 0000592A 2846 ?0197:\r
+ 0000592A 21 00 00 2847 LD HL,0\r
+ 0000592D 39 2848 ADD HL,SP\r
+ 0000592E E5 2849 PUSH HL\r
+ 0000592F CD 4E 53 2850 CALL LWRD ?0467\r
+ 00005932 E1 2851 POP HL\r
+ 00005933 21 00 00 2852 LD HL,0\r
+ 00005936 39 2853 ADD HL,SP\r
+ 00005937 CD D7 57 2854 CALL LWRD ?0457\r
+ 0000593A CD 5E 81 2855 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000593D DD CB 0A 4E 2856 BIT 1,(IX+10)\r
+ 00005941 28 36 2857 JR Z,?0200\r
+ 00005943 DD CB 0A 56 2858 BIT 2,(IX+10)\r
+ 00005947 28 30 2859 JR Z,?0200\r
+ 00005949 2860 ?0202:\r
+ 00005949 2861 ?0201:\r
+ 00005949 2862 ?0199:\r
+ 00005949 DD 4E 08 2863 LD C,(IX+8)\r
+ 0000594C DD 46 09 2864 LD B,(IX+9)\r
+ 0000594F DD 5E 06 2865 LD E,(IX+6)\r
+ 00005952 DD 56 07 2866 LD D,(IX+7)\r
+ 00005955 3E 00 2867 LD A,BYTE3 FillRectNC\r
+ 00005957 21 78 47 2868 LD HL,LWRD FillRectNC\r
+ 0000595A CD 5E 81 2869 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000595D DD 6E 08 2870 LD L,(IX+8)\r
+ 00005960 DD 66 09 2871 LD H,(IX+9)\r
+ 00005963 E5 2872 PUSH HL\r
+ 00005964 DD 6E 06 2873 LD L,(IX+6)\r
+ 00005967 DD 66 07 2874 LD H,(IX+7)\r
+ 0000596A E5 2875 PUSH HL\r
+ 0000596B 21 04 00 2876 LD HL,4\r
+ 0000596E 39 2877 ADD HL,SP\r
+ 0000596F 4E 2878 LD C,(HL)\r
+ 00005970 23 2879 INC HL\r
+ 00005971 46 2880 LD B,(HL)\r
+ 00005972 C5 2881 PUSH BC\r
+ 00005973 23 2882 INC HL\r
+ 00005974 4E 2883 LD C,(HL)\r
+ 00005975 23 2884 INC HL\r
+ 00005976 46 2885 LD B,(HL)\r
+ 00005977 18 34 2886 JR ?0357\r
+ 00005979 2887 ?0200:\r
+ 00005979 DD 4E 08 2888 LD C,(IX+8)\r
+ 0000597C DD 46 09 2889 LD B,(IX+9)\r
+ 0000597F DD 5E 06 2890 LD E,(IX+6)\r
+ 00005982 DD 56 07 2891 LD D,(IX+7)\r
+ 00005985 3E 00 2892 LD A,BYTE3 DrawRectNC\r
+ 00005987 21 EE 46 2893 LD HL,LWRD DrawRectNC\r
+ 0000598A CD 5E 81 2894 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000598D DD 6E 08 2895 LD L,(IX+8)\r
+ 00005990 DD 66 09 2896 LD H,(IX+9)\r
+ 00005993 E5 2897 PUSH HL\r
+ 00005994 DD 6E 06 2898 LD L,(IX+6)\r
+ 00005997 DD 66 07 2899 LD H,(IX+7)\r
+ 0000599A E5 2900 PUSH HL\r
+ 0000599B 21 04 00 2901 LD HL,4\r
+ 0000599E 39 2902 ADD HL,SP\r
+ 0000599F 4E 2903 LD C,(HL)\r
+ 000059A0 23 2904 INC HL\r
+ 000059A1 46 2905 LD B,(HL)\r
+ 000059A2 C5 2906 PUSH BC\r
+ 000059A3 23 2907 INC HL\r
+ 000059A4 4E 2908 LD C,(HL)\r
+ 000059A5 23 2909 INC HL\r
+ 000059A6 46 2910 LD B,(HL)\r
+ 000059A7 DD CB 0A 4E 2911 BIT 1,(IX+10)\r
+ 000059AB 28 07 2912 JR Z,?0205\r
+ 000059AD 2913 ?0357:\r
+ 000059AD DD 5E 10 2914 LD E,(IX+16)\r
+ 000059B0 16 00 2915 LD D,0\r
+ 000059B2 18 03 2916 JR ?0206\r
+ 000059B4 2917 ?0205:\r
+ 000059B4 11 00 00 2918 LD DE,0\r
+ 000059B7 2919 ?0206:\r
+ 000059B7 CD BB 48 2920 CALL LWRD ?0471\r
+ 000059BA E1 2921 POP HL\r
+ 000059BB E1 2922 POP HL\r
+ 000059BC E1 2923 POP HL\r
+ 000059BD 2924 ?0203:\r
+ 000059BD 21 00 00 2925 LD HL,0\r
+ 000059C0 39 2926 ADD HL,SP\r
+ 000059C1 4E 2927 LD C,(HL)\r
+ 000059C2 23 2928 INC HL\r
+ 000059C3 46 2929 LD B,(HL)\r
+ 000059C4 C5 2930 PUSH BC\r
+ 000059C5 23 2931 INC HL\r
+ 000059C6 4E 2932 LD C,(HL)\r
+ 000059C7 23 2933 INC HL\r
+ 000059C8 46 2934 LD B,(HL)\r
+ 000059C9 DD E5 2935 PUSH IX\r
+ 000059CB D1 2936 POP DE\r
+ 000059CC 3E 00 2937 LD A,BYTE3 Button_drawtext\r
+ 000059CE 21 43 56 2938 LD HL,LWRD Button_drawtext\r
+ 000059D1 CD 5E 81 2939 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000059D4 E1 2940 POP HL\r
+ 000059D5 2941 ?0198:\r
+ 000059D5 C3 CF 57 2942 JP LWRD ?0178\r
+ 000059D8 2943 ToggleButton_new:\r
+ 000059D8 CD 88 81 2944 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000059DB 00 00 2945 DEFW 0\r
+ 000059DD FD E5 2946 PUSH IY\r
+ 000059DF DD 6E 0C 2947 LD L,(IX+12)\r
+ 000059E2 DD 66 0D 2948 LD H,(IX+13)\r
+ 000059E5 E5 2949 PUSH HL\r
+ 000059E6 DD 6E 0A 2950 LD L,(IX+10)\r
+ 000059E9 DD 66 0B 2951 LD H,(IX+11)\r
+ 000059EC E5 2952 PUSH HL\r
+ 000059ED CD 7E 55 2953 CALL LWRD ?0438\r
+ 000059F0 F1 2954 POP AF\r
+ 000059F1 F1 2955 POP AF\r
+ 000059F2 E5 2956 PUSH HL\r
+ 000059F3 FD E1 2957 POP IY\r
+ 000059F5 01 0A 00 2958 LD BC,10\r
+ 000059F8 09 2959 ADD HL,BC\r
+ 000059F9 7E 2960 LD A,(HL)\r
+ 000059FA F6 07 2961 OR 7\r
+ 000059FC 77 2962 LD (HL),A\r
+ 000059FD DD 46 0E 2963 LD B,(IX+14)\r
+ 00005A00 FD 70 10 2964 LD (IY+16),B\r
+ 00005A03 FD 36 17 50 2965 LD (IY+23),LOW(ToggleButton_handler)\r
+ 00005A07 FD 36 18 58 2966 LD (IY+24),HIGH(ToggleButton_handler)\r
+ 00005A0B FD 36 19 00 2967 LD (IY+25),BYTE3 ToggleButton_handler\r
+ 00005A0F FD 36 1A EC 2968 LD (IY+26),LOW(ToggleButton_paint)\r
+ 00005A13 FD 36 1B 58 2969 LD (IY+27),HIGH(ToggleButton_paint)\r
+ 00005A17 FD 36 1C 00 2970 LD (IY+28),BYTE3 ToggleButton_paint\r
+ 00005A1B FD 36 1D F8 2971 LD (IY+29),LOW(Button_add)\r
+ 00005A1F FD 36 1E 57 2972 LD (IY+30),HIGH(Button_add)\r
+ 00005A23 FD 36 1F 00 2973 LD (IY+31),BYTE3 Button_add\r
+ 00005A27 C3 1A 4C 2974 JP LWRD ?0418\r
+ 00005A2A 2975 Dialog_handler:\r
+ 00005A2A CD 52 81 2976 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00005A2D FD E5 2977 PUSH IY\r
+ 00005A2F D5 2978 PUSH DE\r
+ 00005A30 FD E1 2979 POP IY\r
+ 00005A32 DD 6E 0A 2980 LD L,(IX+10)\r
+ 00005A35 DD 66 0B 2981 LD H,(IX+11)\r
+ 00005A38 E5 2982 PUSH HL\r
+ 00005A39 3E 00 2983 LD A,BYTE3 Window_handler\r
+ 00005A3B 21 9B 50 2984 LD HL,LWRD Window_handler\r
+ 00005A3E CD 5E 81 2985 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005A41 E1 2986 POP HL\r
+ 00005A42 21 01 02 2987 LD HL,513\r
+ 00005A45 DD 4E 04 2988 LD C,(IX+4)\r
+ 00005A48 DD 46 05 2989 LD B,(IX+5)\r
+ 00005A4B A7 2990 AND A\r
+ 00005A4C ED 42 2991 SBC HL,BC\r
+ 00005A4E 20 40 2992 JR NZ,?0208\r
+ 00005A50 3E FF 2993 LD A,255\r
+ 00005A52 DD AE 0A 2994 XOR (IX+10)\r
+ 00005A55 DD B6 0B 2995 OR (IX+11)\r
+ 00005A58 20 36 2996 JR NZ,?0208\r
+ 00005A5A 2997 ?0210:\r
+ 00005A5A 2998 ?0209:\r
+ 00005A5A 2999 ?0207:\r
+ 00005A5A FD CB 0B 66 3000 BIT 4,(IY+11)\r
+ 00005A5E E5 3001 PUSH HL\r
+ 00005A5F 28 05 3002 JR Z,?0212\r
+ 00005A61 3003 ?0211:\r
+ 00005A61 01 05 01 3004 LD BC,261\r
+ 00005A64 18 03 3005 JR ?0358\r
+ 00005A66 3006 ?0212:\r
+ 00005A66 01 02 01 3007 LD BC,258\r
+ 00005A69 3008 ?0358:\r
+ 00005A69 CD 3F 53 3009 CALL LWRD ?0463\r
+ 00005A6C E1 3010 POP HL\r
+ 00005A6D 3011 ?0213:\r
+ 00005A6D FD 4E 10 3012 LD C,(IY+16)\r
+ 00005A70 06 00 3013 LD B,0\r
+ 00005A72 C5 3014 PUSH BC\r
+ 00005A73 FD 5E 11 3015 LD E,(IY+17)\r
+ 00005A76 FD 56 12 3016 LD D,(IY+18)\r
+ 00005A79 FD 6E 11 3017 LD L,(IY+17)\r
+ 00005A7C FD 66 12 3018 LD H,(IY+18)\r
+ 00005A7F 0E 17 3019 LD C,23\r
+ 00005A81 09 3020 ADD HL,BC\r
+ 00005A82 4E 3021 LD C,(HL)\r
+ 00005A83 23 3022 INC HL\r
+ 00005A84 46 3023 LD B,(HL)\r
+ 00005A85 23 3024 INC HL\r
+ 00005A86 7E 3025 LD A,(HL)\r
+ 00005A87 69 3026 LD L,C\r
+ 00005A88 60 3027 LD H,B\r
+ 00005A89 01 01 03 3028 LD BC,769\r
+ 00005A8C CD 5E 81 3029 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005A8F E1 3030 POP HL\r
+ 00005A90 3031 ?0208:\r
+ 00005A90 21 01 02 3032 LD HL,513\r
+ 00005A93 DD 4E 04 3033 LD C,(IX+4)\r
+ 00005A96 DD 46 05 3034 LD B,(IX+5)\r
+ 00005A99 A7 3035 AND A\r
+ 00005A9A ED 42 3036 SBC HL,BC\r
+ 00005A9C 20 40 3037 JR NZ,?0215\r
+ 00005A9E 3E FE 3038 LD A,254\r
+ 00005AA0 DD AE 0A 3039 XOR (IX+10)\r
+ 00005AA3 DD B6 0B 3040 OR (IX+11)\r
+ 00005AA6 20 36 3041 JR NZ,?0215\r
+ 00005AA8 3042 ?0217:\r
+ 00005AA8 3043 ?0216:\r
+ 00005AA8 3044 ?0214:\r
+ 00005AA8 FD CB 0B 66 3045 BIT 4,(IY+11)\r
+ 00005AAC E5 3046 PUSH HL\r
+ 00005AAD 28 05 3047 JR Z,?0219\r
+ 00005AAF 3048 ?0218:\r
+ 00005AAF 01 05 01 3049 LD BC,261\r
+ 00005AB2 18 03 3050 JR ?0359\r
+ 00005AB4 3051 ?0219:\r
+ 00005AB4 01 02 01 3052 LD BC,258\r
+ 00005AB7 3053 ?0359:\r
+ 00005AB7 CD 3F 53 3054 CALL LWRD ?0463\r
+ 00005ABA E1 3055 POP HL\r
+ 00005ABB 3056 ?0220:\r
+ 00005ABB FD 4E 10 3057 LD C,(IY+16)\r
+ 00005ABE 06 00 3058 LD B,0\r
+ 00005AC0 C5 3059 PUSH BC\r
+ 00005AC1 FD 5E 11 3060 LD E,(IY+17)\r
+ 00005AC4 FD 56 12 3061 LD D,(IY+18)\r
+ 00005AC7 FD 6E 11 3062 LD L,(IY+17)\r
+ 00005ACA FD 66 12 3063 LD H,(IY+18)\r
+ 00005ACD 0E 17 3064 LD C,23\r
+ 00005ACF 09 3065 ADD HL,BC\r
+ 00005AD0 4E 3066 LD C,(HL)\r
+ 00005AD1 23 3067 INC HL\r
+ 00005AD2 46 3068 LD B,(HL)\r
+ 00005AD3 23 3069 INC HL\r
+ 00005AD4 7E 3070 LD A,(HL)\r
+ 00005AD5 69 3071 LD L,C\r
+ 00005AD6 60 3072 LD H,B\r
+ 00005AD7 01 02 03 3073 LD BC,770\r
+ 00005ADA CD 5E 81 3074 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005ADD E1 3075 POP HL\r
+ 00005ADE 3076 ?0215:\r
+ 00005ADE FD E1 3077 POP IY\r
+ 00005AE0 C3 1F 81 3078 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00005AE3 3079 Dialog_new:\r
+ 00005AE3 CD 88 81 3080 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00005AE6 FE FF 3081 DEFW -2\r
+ 00005AE8 FD E5 3082 PUSH IY\r
+ 00005AEA DD 6E 0C 3083 LD L,(IX+12)\r
+ 00005AED DD 66 0D 3084 LD H,(IX+13)\r
+ 00005AF0 E5 3085 PUSH HL\r
+ 00005AF1 DD 6E 0A 3086 LD L,(IX+10)\r
+ 00005AF4 DD 66 0B 3087 LD H,(IX+11)\r
+ 00005AF7 E5 3088 PUSH HL\r
+ 00005AF8 CD 7E 55 3089 CALL LWRD ?0438\r
+ 00005AFB F1 3090 POP AF\r
+ 00005AFC F1 3091 POP AF\r
+ 00005AFD E5 3092 PUSH HL\r
+ 00005AFE FD E1 3093 POP IY\r
+ 00005B00 01 0A 00 3094 LD BC,10\r
+ 00005B03 09 3095 ADD HL,BC\r
+ 00005B04 CB C6 3096 SET 0,(HL)\r
+ 00005B06 DD 46 0E 3097 LD B,(IX+14)\r
+ 00005B09 FD 70 10 3098 LD (IY+16),B\r
+ 00005B0C FD 36 17 2A 3099 LD (IY+23),LOW(Dialog_handler)\r
+ 00005B10 FD 36 18 5A 3100 LD (IY+24),HIGH(Dialog_handler)\r
+ 00005B14 FD 36 19 00 3101 LD (IY+25),BYTE3 Dialog_handler\r
+ 00005B18 FD 36 1A 68 3102 LD (IY+26),LOW(Window_paint)\r
+ 00005B1C FD 36 1B 53 3103 LD (IY+27),HIGH(Window_paint)\r
+ 00005B20 FD 36 1C 00 3104 LD (IY+28),BYTE3 Window_paint\r
+ 00005B24 FD 36 1D 2C 3105 LD (IY+29),LOW(Window_add)\r
+ 00005B28 FD 36 1E 55 3106 LD (IY+30),HIGH(Window_add)\r
+ 00005B2C FD 36 1F 00 3107 LD (IY+31),BYTE3 Window_add\r
+ 00005B30 21 FF 00 3108 LD HL,255\r
+ 00005B33 E5 3109 PUSH HL\r
+ 00005B34 2E 14 3110 LD L,20\r
+ 00005B36 E5 3111 PUSH HL\r
+ 00005B37 2E 28 3112 LD L,40\r
+ 00005B39 E5 3113 PUSH HL\r
+ 00005B3A 21 E4 FF 3114 LD HL,65508\r
+ 00005B3D CD 95 5B 3115 CALL LWRD ?0439\r
+ 00005B40 F1 3116 POP AF\r
+ 00005B41 F1 3117 POP AF\r
+ 00005B42 F1 3118 POP AF\r
+ 00005B43 DD 75 FE 3119 LD (IX-2),L\r
+ 00005B46 DD 74 FF 3120 LD (IX-1),H\r
+ 00005B49 01 20 00 3121 LD BC,32\r
+ 00005B4C 09 3122 ADD HL,BC\r
+ 00005B4D E5 3123 PUSH HL\r
+ 00005B4E 11 03 00 3124 LD DE,3\r
+ 00005B51 CD F1 49 3125 CALL LWRD ?0450\r
+ 00005B54 E1 3126 POP HL\r
+ 00005B55 71 3127 LD (HL),C\r
+ 00005B56 23 3128 INC HL\r
+ 00005B57 70 3129 LD (HL),B\r
+ 00005B58 01 BF 84 3130 LD BC,?0221\r
+ 00005B5B CD B1 5B 3131 CALL LWRD ?0456\r
+ 00005B5E CD 5E 81 3132 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005B61 21 FE 00 3133 LD HL,254\r
+ 00005B64 E5 3134 PUSH HL\r
+ 00005B65 2E 14 3135 LD L,20\r
+ 00005B67 E5 3136 PUSH HL\r
+ 00005B68 2E 28 3137 LD L,40\r
+ 00005B6A E5 3138 PUSH HL\r
+ 00005B6B 21 C8 FF 3139 LD HL,65480\r
+ 00005B6E CD 95 5B 3140 CALL LWRD ?0439\r
+ 00005B71 F1 3141 POP AF\r
+ 00005B72 F1 3142 POP AF\r
+ 00005B73 F1 3143 POP AF\r
+ 00005B74 DD 75 FE 3144 LD (IX-2),L\r
+ 00005B77 DD 74 FF 3145 LD (IX-1),H\r
+ 00005B7A 01 20 00 3146 LD BC,32\r
+ 00005B7D 09 3147 ADD HL,BC\r
+ 00005B7E E5 3148 PUSH HL\r
+ 00005B7F 11 07 00 3149 LD DE,7\r
+ 00005B82 CD F1 49 3150 CALL LWRD ?0450\r
+ 00005B85 E1 3151 POP HL\r
+ 00005B86 71 3152 LD (HL),C\r
+ 00005B87 23 3153 INC HL\r
+ 00005B88 70 3154 LD (HL),B\r
+ 00005B89 01 C2 84 3155 LD BC,?0222\r
+ 00005B8C CD B1 5B 3156 CALL LWRD ?0456\r
+ 00005B8F CD 5E 81 3157 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005B92 C3 1A 4C 3158 JP LWRD ?0418\r
+ 00005B95 3159 ?0439:\r
+ 00005B95 DD 4E 0C 3160 LD C,(IX+12)\r
+ 00005B98 DD 46 0D 3161 LD B,(IX+13)\r
+ 00005B9B 09 3162 ADD HL,BC\r
+ 00005B9C 4D 3163 LD C,L\r
+ 00005B9D 44 3164 LD B,H\r
+ 00005B9E 21 D0 FF 3165 LD HL,65488\r
+ 00005BA1 DD 5E 0A 3166 LD E,(IX+10)\r
+ 00005BA4 DD 56 0B 3167 LD D,(IX+11)\r
+ 00005BA7 19 3168 ADD HL,DE\r
+ 00005BA8 EB 3169 EX DE,HL\r
+ 00005BA9 3170 ?0440:\r
+ 00005BA9 3E 00 3171 LD A,BYTE3 Button_new\r
+ 00005BAB 21 FE 57 3172 LD HL,LWRD Button_new\r
+ 00005BAE C3 5E 81 3173 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005BB1 3174 ?0456:\r
+ 00005BB1 DD 5E FE 3175 LD E,(IX-2)\r
+ 00005BB4 DD 56 FF 3176 LD D,(IX-1)\r
+ 00005BB7 3E 00 3177 LD A,BYTE3 Component_setlabel\r
+ 00005BB9 21 22 4C 3178 LD HL,LWRD Component_setlabel\r
+ 00005BBC CD 5E 81 3179 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005BBF DD 4E FE 3180 LD C,(IX-2)\r
+ 00005BC2 DD 46 FF 3181 LD B,(IX-1)\r
+ 00005BC5 FD E5 3182 PUSH IY\r
+ 00005BC7 D1 3183 POP DE\r
+ 00005BC8 FD 7E 1F 3184 LD A,(IY+31)\r
+ 00005BCB FD 6E 1D 3185 LD L,(IY+29)\r
+ 00005BCE FD 66 1E 3186 LD H,(IY+30)\r
+ 00005BD1 C9 3187 RET\r
+ 00005BD2 3188 Display_handler:\r
+ 00005BD2 CD 52 81 3189 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00005BD5 FD E5 3190 PUSH IY\r
+ 00005BD7 D5 3191 PUSH DE\r
+ 00005BD8 FD E1 3192 POP IY\r
+ 00005BDA DD 6E 0A 3193 LD L,(IX+10)\r
+ 00005BDD DD 66 0B 3194 LD H,(IX+11)\r
+ 00005BE0 E5 3195 PUSH HL\r
+ 00005BE1 3E 00 3196 LD A,BYTE3 Button_handler\r
+ 00005BE3 21 8C 55 3197 LD HL,LWRD Button_handler\r
+ 00005BE6 CD 5E 81 3198 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005BE9 E1 3199 POP HL\r
+ 00005BEA 21 03 02 3200 LD HL,515\r
+ 00005BED DD 4E 04 3201 LD C,(IX+4)\r
+ 00005BF0 DD 46 05 3202 LD B,(IX+5)\r
+ 00005BF3 A7 3203 AND A\r
+ 00005BF4 ED 42 3204 SBC HL,BC\r
+ 00005BF6 20 40 3205 JR NZ,?0224\r
+ 00005BF8 FD CB 0A 5E 3206 BIT 3,(IY+10)\r
+ 00005BFC 28 3A 3207 JR Z,?0224\r
+ 00005BFE 3208 ?0226:\r
+ 00005BFE 3209 ?0225:\r
+ 00005BFE 3210 ?0223:\r
+ 00005BFE 3E 08 3211 LD A,8\r
+ 00005C00 DD AE 0A 3212 XOR (IX+10)\r
+ 00005C03 DD B6 0B 3213 OR (IX+11)\r
+ 00005C06 FD 5E 20 3214 LD E,(IY+32)\r
+ 00005C09 FD 56 21 3215 LD D,(IY+33)\r
+ 00005C0C 3E 00 3216 LD A,BYTE3 strlen\r
+ 00005C0E 21 40 72 3217 LD HL,LWRD strlen\r
+ 00005C11 20 0D 3218 JR NZ,?0228\r
+ 00005C13 3219 ?0227:\r
+ 00005C13 CD EB 49 3220 CALL LWRD ?0448\r
+ 00005C16 28 15 3221 JR Z,?0231\r
+ 00005C18 3222 ?0229:\r
+ 00005C18 CD 3D 5C 3223 CALL LWRD ?0445\r
+ 00005C1B 2B 3224 DEC HL\r
+ 00005C1C 36 00 3225 LD (HL),0\r
+ 00005C1E 3226 ?0230:\r
+ 00005C1E 18 0D 3227 JR ?0231\r
+ 00005C20 3228 ?0228:\r
+ 00005C20 CD 48 5C 3229 CALL LWRD ?0446\r
+ 00005C23 23 3230 INC HL\r
+ 00005C24 36 00 3231 LD (HL),0\r
+ 00005C26 CD 3D 5C 3232 CALL LWRD ?0445\r
+ 00005C29 DD 46 0A 3233 LD B,(IX+10)\r
+ 00005C2C 70 3234 LD (HL),B\r
+ 00005C2D 3235 ?0231:\r
+ 00005C2D 21 00 00 3236 LD HL,0\r
+ 00005C30 E5 3237 PUSH HL\r
+ 00005C31 01 03 01 3238 LD BC,259\r
+ 00005C34 CD 3F 53 3239 CALL LWRD ?0463\r
+ 00005C37 E1 3240 POP HL\r
+ 00005C38 3241 ?0224:\r
+ 00005C38 FD E1 3242 POP IY\r
+ 00005C3A C3 1F 81 3243 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00005C3D 3244 ?0445:\r
+ 00005C3D FD 5E 20 3245 LD E,(IY+32)\r
+ 00005C40 FD 56 21 3246 LD D,(IY+33)\r
+ 00005C43 3E 00 3247 LD A,BYTE3 strlen\r
+ 00005C45 21 40 72 3248 LD HL,LWRD strlen\r
+ 00005C48 3249 ?0446:\r
+ 00005C48 CD 5E 81 3250 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005C4B FD 4E 20 3251 LD C,(IY+32)\r
+ 00005C4E FD 46 21 3252 LD B,(IY+33)\r
+ 00005C51 09 3253 ADD HL,BC\r
+ 00005C52 C9 3254 RET\r
+ 00005C53 3255 Display_paint:\r
+ 00005C53 C5 3256 PUSH BC\r
+ 00005C54 FD E5 3257 PUSH IY\r
+ 00005C56 DD E5 3258 PUSH IX\r
+ 00005C58 21 B8 FF 3259 LD HL,65464\r
+ 00005C5B 39 3260 ADD HL,SP\r
+ 00005C5C F9 3261 LD SP,HL\r
+ 00005C5D D5 3262 PUSH DE\r
+ 00005C5E DD E1 3263 POP IX\r
+ 00005C60 AF 3264 XOR A\r
+ 00005C61 77 3265 LD (HL),A\r
+ 00005C62 23 3266 INC HL\r
+ 00005C63 77 3267 LD (HL),A\r
+ 00005C64 23 3268 INC HL\r
+ 00005C65 77 3269 LD (HL),A\r
+ 00005C66 23 3270 INC HL\r
+ 00005C67 77 3271 LD (HL),A\r
+ 00005C68 21 0A 00 3272 LD HL,10\r
+ 00005C6B ED 4B C0 86 3273 LD BC,(global)\r
+ 00005C6F 09 3274 ADD HL,BC\r
+ 00005C70 7E 3275 LD A,(HL)\r
+ 00005C71 23 3276 INC HL\r
+ 00005C72 66 3277 LD H,(HL)\r
+ 00005C73 6F 3278 LD L,A\r
+ 00005C74 46 3279 LD B,(HL)\r
+ 00005C75 23 3280 INC HL\r
+ 00005C76 66 3281 LD H,(HL)\r
+ 00005C77 68 3282 LD L,B\r
+ 00005C78 E5 3283 PUSH HL\r
+ 00005C79 21 0E 00 3284 LD HL,14\r
+ 00005C7C 19 3285 ADD HL,DE\r
+ 00005C7D 4E 3286 LD C,(HL)\r
+ 00005C7E 23 3287 INC HL\r
+ 00005C7F 46 3288 LD B,(HL)\r
+ 00005C80 E1 3289 POP HL\r
+ 00005C81 A7 3290 AND A\r
+ 00005C82 ED 42 3291 SBC HL,BC\r
+ 00005C84 28 03 3292 JR Z,?0233\r
+ 00005C86 3293 ?0232:\r
+ 00005C86 CD E7 54 3294 CALL LWRD ?0473\r
+ 00005C89 3295 ?0233:\r
+ 00005C89 DD CB 0A 46 3296 BIT 0,(IX+10)\r
+ 00005C8D CA 97 5D 3297 JP Z,?0248\r
+ 00005C90 3298 ?0234:\r
+ 00005C90 21 02 00 3299 LD HL,2\r
+ 00005C93 39 3300 ADD HL,SP\r
+ 00005C94 E5 3301 PUSH HL\r
+ 00005C95 2B 3302 DEC HL\r
+ 00005C96 2B 3303 DEC HL\r
+ 00005C97 CD 50 53 3304 CALL LWRD ?0468\r
+ 00005C9A E1 3305 POP HL\r
+ 00005C9B 21 02 00 3306 LD HL,2\r
+ 00005C9E 39 3307 ADD HL,SP\r
+ 00005C9F 4E 3308 LD C,(HL)\r
+ 00005CA0 23 3309 INC HL\r
+ 00005CA1 46 3310 LD B,(HL)\r
+ 00005CA2 2B 3311 DEC HL\r
+ 00005CA3 2B 3312 DEC HL\r
+ 00005CA4 2B 3313 DEC HL\r
+ 00005CA5 CD DB 57 3314 CALL LWRD ?0458\r
+ 00005CA8 CD 5E 81 3315 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005CAB DD 6E 08 3316 LD L,(IX+8)\r
+ 00005CAE DD 66 09 3317 LD H,(IX+9)\r
+ 00005CB1 E5 3318 PUSH HL\r
+ 00005CB2 DD 6E 06 3319 LD L,(IX+6)\r
+ 00005CB5 DD 66 07 3320 LD H,(IX+7)\r
+ 00005CB8 E5 3321 PUSH HL\r
+ 00005CB9 21 06 00 3322 LD HL,6\r
+ 00005CBC 39 3323 ADD HL,SP\r
+ 00005CBD 4E 3324 LD C,(HL)\r
+ 00005CBE 23 3325 INC HL\r
+ 00005CBF 46 3326 LD B,(HL)\r
+ 00005CC0 C5 3327 PUSH BC\r
+ 00005CC1 2B 3328 DEC HL\r
+ 00005CC2 2B 3329 DEC HL\r
+ 00005CC3 2B 3330 DEC HL\r
+ 00005CC4 4E 3331 LD C,(HL)\r
+ 00005CC5 23 3332 INC HL\r
+ 00005CC6 46 3333 LD B,(HL)\r
+ 00005CC7 DD CB 0A 4E 3334 BIT 1,(IX+10)\r
+ 00005CCB 28 07 3335 JR Z,?0237\r
+ 00005CCD DD 5E 10 3336 LD E,(IX+16)\r
+ 00005CD0 16 00 3337 LD D,0\r
+ 00005CD2 18 03 3338 JR ?0238\r
+ 00005CD4 3339 ?0237:\r
+ 00005CD4 11 00 00 3340 LD DE,0\r
+ 00005CD7 3341 ?0238:\r
+ 00005CD7 CD BB 48 3342 CALL LWRD ?0471\r
+ 00005CDA E1 3343 POP HL\r
+ 00005CDB E1 3344 POP HL\r
+ 00005CDC E1 3345 POP HL\r
+ 00005CDD DD CB 0A 7E 3346 BIT 7,(IX+10)\r
+ 00005CE1 DD 4E 08 3347 LD C,(IX+8)\r
+ 00005CE4 DD 46 09 3348 LD B,(IX+9)\r
+ 00005CE7 DD 5E 06 3349 LD E,(IX+6)\r
+ 00005CEA DD 56 07 3350 LD D,(IX+7)\r
+ 00005CED 20 07 3351 JR NZ,?0240\r
+ 00005CEF 3352 ?0239:\r
+ 00005CEF 3E 00 3353 LD A,BYTE3 FillRectNC\r
+ 00005CF1 21 78 47 3354 LD HL,LWRD FillRectNC\r
+ 00005CF4 18 05 3355 JR ?0364\r
+ 00005CF6 3356 ?0240:\r
+ 00005CF6 3E 00 3357 LD A,BYTE3 DrawRectNC\r
+ 00005CF8 21 EE 46 3358 LD HL,LWRD DrawRectNC\r
+ 00005CFB 3359 ?0364:\r
+ 00005CFB CD 5E 81 3360 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005CFE 3361 ?0241:\r
+ 00005CFE DD 5E 20 3362 LD E,(IX+32)\r
+ 00005D01 DD 56 21 3363 LD D,(IX+33)\r
+ 00005D04 21 0A 00 3364 LD HL,10\r
+ 00005D07 ED 4B C0 86 3365 LD BC,(global)\r
+ 00005D0B 09 3366 ADD HL,BC\r
+ 00005D0C 46 3367 LD B,(HL)\r
+ 00005D0D 23 3368 INC HL\r
+ 00005D0E 66 3369 LD H,(HL)\r
+ 00005D0F 68 3370 LD L,B\r
+ 00005D10 01 05 00 3371 LD BC,5\r
+ 00005D13 09 3372 ADD HL,BC\r
+ 00005D14 4E 3373 LD C,(HL)\r
+ 00005D15 23 3374 INC HL\r
+ 00005D16 46 3375 LD B,(HL)\r
+ 00005D17 23 3376 INC HL\r
+ 00005D18 7E 3377 LD A,(HL)\r
+ 00005D19 69 3378 LD L,C\r
+ 00005D1A 60 3379 LD H,B\r
+ 00005D1B CD F6 49 3380 CALL LWRD ?0449\r
+ 00005D1E DD 6E 08 3381 LD L,(IX+8)\r
+ 00005D21 DD 66 09 3382 LD H,(IX+9)\r
+ 00005D24 A7 3383 AND A\r
+ 00005D25 ED 42 3384 SBC HL,BC\r
+ 00005D27 EB 3385 EX DE,HL\r
+ 00005D28 01 02 00 3386 LD BC,2\r
+ 00005D2B CD C1 81 3387 CALL LWRD ?SS_DIV_L02\r
+ 00005D2E 69 3388 LD L,C\r
+ 00005D2F 60 3389 LD H,B\r
+ 00005D30 39 3390 ADD HL,SP\r
+ 00005D31 46 3391 LD B,(HL)\r
+ 00005D32 23 3392 INC HL\r
+ 00005D33 66 3393 LD H,(HL)\r
+ 00005D34 68 3394 LD L,B\r
+ 00005D35 19 3395 ADD HL,DE\r
+ 00005D36 01 07 00 3396 LD BC,7\r
+ 00005D39 09 3397 ADD HL,BC\r
+ 00005D3A 4D 3398 LD C,L\r
+ 00005D3B 44 3399 LD B,H\r
+ 00005D3C 21 00 00 3400 LD HL,0\r
+ 00005D3F 39 3401 ADD HL,SP\r
+ 00005D40 5E 3402 LD E,(HL)\r
+ 00005D41 23 3403 INC HL\r
+ 00005D42 56 3404 LD D,(HL)\r
+ 00005D43 13 3405 INC DE\r
+ 00005D44 13 3406 INC DE\r
+ 00005D45 3E 00 3407 LD A,BYTE3 Move\r
+ 00005D47 21 6C 46 3408 LD HL,LWRD Move\r
+ 00005D4A CD 5E 81 3409 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005D4D DD CB 0B 46 3410 BIT 0,(IX+11)\r
+ 00005D51 28 36 3411 JR Z,?0243\r
+ 00005D53 3412 ?0242:\r
+ 00005D53 FD 21 00 00 3413 LD IY,0\r
+ 00005D57 3414 ?0245:\r
+ 00005D57 DD 5E 20 3415 LD E,(IX+32)\r
+ 00005D5A DD 56 21 3416 LD D,(IX+33)\r
+ 00005D5D 3E 00 3417 LD A,BYTE3 strlen\r
+ 00005D5F 21 40 72 3418 LD HL,LWRD strlen\r
+ 00005D62 CD F6 49 3419 CALL LWRD ?0449\r
+ 00005D65 FD E5 3420 PUSH IY\r
+ 00005D67 E1 3421 POP HL\r
+ 00005D68 A7 3422 AND A\r
+ 00005D69 ED 42 3423 SBC HL,BC\r
+ 00005D6B 21 06 00 3424 LD HL,6\r
+ 00005D6E 30 0B 3425 JR NC,?0244\r
+ 00005D70 3426 ?0246:\r
+ 00005D70 39 3427 ADD HL,SP\r
+ 00005D71 FD E5 3428 PUSH IY\r
+ 00005D73 C1 3429 POP BC\r
+ 00005D74 09 3430 ADD HL,BC\r
+ 00005D75 36 2A 3431 LD (HL),42\r
+ 00005D77 FD 23 3432 INC IY\r
+ 00005D79 18 DC 3433 JR ?0245\r
+ 00005D7B 3434 ?0244:\r
+ 00005D7B 39 3435 ADD HL,SP\r
+ 00005D7C FD E5 3436 PUSH IY\r
+ 00005D7E C1 3437 POP BC\r
+ 00005D7F 09 3438 ADD HL,BC\r
+ 00005D80 36 00 3439 LD (HL),0\r
+ 00005D82 21 06 00 3440 LD HL,6\r
+ 00005D85 39 3441 ADD HL,SP\r
+ 00005D86 EB 3442 EX DE,HL\r
+ 00005D87 18 06 3443 JR ?0365\r
+ 00005D89 3444 ?0243:\r
+ 00005D89 DD 5E 20 3445 LD E,(IX+32)\r
+ 00005D8C DD 56 21 3446 LD D,(IX+33)\r
+ 00005D8F 3447 ?0365:\r
+ 00005D8F 3E 00 3448 LD A,BYTE3 Text\r
+ 00005D91 21 02 48 3449 LD HL,LWRD Text\r
+ 00005D94 CD 5E 81 3450 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005D97 3451 ?0248:\r
+ 00005D97 3452 ?0235:\r
+ 00005D97 21 48 00 3453 LD HL,72\r
+ 00005D9A 39 3454 ADD HL,SP\r
+ 00005D9B F9 3455 LD SP,HL\r
+ 00005D9C C3 27 48 3456 JP LWRD ?0411\r
+ 00005D9F 3457 Display_new:\r
+ 00005D9F CD 88 81 3458 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00005DA2 00 00 3459 DEFW 0\r
+ 00005DA4 FD E5 3460 PUSH IY\r
+ 00005DA6 DD 6E 0E 3461 LD L,(IX+14)\r
+ 00005DA9 DD 66 0F 3462 LD H,(IX+15)\r
+ 00005DAC E5 3463 PUSH HL\r
+ 00005DAD DD 6E 0C 3464 LD L,(IX+12)\r
+ 00005DB0 DD 66 0D 3465 LD H,(IX+13)\r
+ 00005DB3 E5 3466 PUSH HL\r
+ 00005DB4 DD 6E 0A 3467 LD L,(IX+10)\r
+ 00005DB7 DD 66 0B 3468 LD H,(IX+11)\r
+ 00005DBA E5 3469 PUSH HL\r
+ 00005DBB DD 5E 02 3470 LD E,(IX+2)\r
+ 00005DBE DD 56 03 3471 LD D,(IX+3)\r
+ 00005DC1 CD A9 5B 3472 CALL LWRD ?0440\r
+ 00005DC4 F1 3473 POP AF\r
+ 00005DC5 F1 3474 POP AF\r
+ 00005DC6 F1 3475 POP AF\r
+ 00005DC7 E5 3476 PUSH HL\r
+ 00005DC8 FD E1 3477 POP IY\r
+ 00005DCA 01 0A 00 3478 LD BC,10\r
+ 00005DCD 09 3479 ADD HL,BC\r
+ 00005DCE CB DE 3480 SET 3,(HL)\r
+ 00005DD0 01 C9 84 3481 LD BC,?0249\r
+ 00005DD3 FD E5 3482 PUSH IY\r
+ 00005DD5 D1 3483 POP DE\r
+ 00005DD6 3E 00 3484 LD A,BYTE3 Component_setlabel\r
+ 00005DD8 21 22 4C 3485 LD HL,LWRD Component_setlabel\r
+ 00005DDB CD 5E 81 3486 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005DDE FD 36 1A 53 3487 LD (IY+26),LOW(Display_paint)\r
+ 00005DE2 FD 36 1B 5C 3488 LD (IY+27),HIGH(Display_paint)\r
+ 00005DE6 FD 36 1C 00 3489 LD (IY+28),BYTE3 Display_paint\r
+ 00005DEA FD 36 17 D2 3490 LD (IY+23),LOW(Display_handler)\r
+ 00005DEE FD 36 18 5B 3491 LD (IY+24),HIGH(Display_handler)\r
+ 00005DF2 FD 36 19 00 3492 LD (IY+25),BYTE3 Display_handler\r
+ 00005DF6 C3 1A 4C 3493 JP LWRD ?0418\r
+ 00005DF9 3494 Label_handler:\r
+ 00005DF9 CD 52 81 3495 CALL LWRD ?ENT_PARM_DIRECT_L09\r
+ 00005DFC C3 1F 81 3496 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00005DFF 3497 Label_paint:\r
+ 00005DFF C5 3498 PUSH BC\r
+ 00005E00 DD E5 3499 PUSH IX\r
+ 00005E02 F5 3500 PUSH AF\r
+ 00005E03 F5 3501 PUSH AF\r
+ 00005E04 D5 3502 PUSH DE\r
+ 00005E05 DD E1 3503 POP IX\r
+ 00005E07 21 02 00 3504 LD HL,2\r
+ 00005E0A 39 3505 ADD HL,SP\r
+ 00005E0B AF 3506 XOR A\r
+ 00005E0C 77 3507 LD (HL),A\r
+ 00005E0D 23 3508 INC HL\r
+ 00005E0E 77 3509 LD (HL),A\r
+ 00005E0F 2B 3510 DEC HL\r
+ 00005E10 2B 3511 DEC HL\r
+ 00005E11 2B 3512 DEC HL\r
+ 00005E12 77 3513 LD (HL),A\r
+ 00005E13 23 3514 INC HL\r
+ 00005E14 77 3515 LD (HL),A\r
+ 00005E15 21 0A 00 3516 LD HL,10\r
+ 00005E18 ED 4B C0 86 3517 LD BC,(global)\r
+ 00005E1C 09 3518 ADD HL,BC\r
+ 00005E1D 7E 3519 LD A,(HL)\r
+ 00005E1E 23 3520 INC HL\r
+ 00005E1F 66 3521 LD H,(HL)\r
+ 00005E20 6F 3522 LD L,A\r
+ 00005E21 46 3523 LD B,(HL)\r
+ 00005E22 23 3524 INC HL\r
+ 00005E23 66 3525 LD H,(HL)\r
+ 00005E24 68 3526 LD L,B\r
+ 00005E25 E5 3527 PUSH HL\r
+ 00005E26 21 0E 00 3528 LD HL,14\r
+ 00005E29 19 3529 ADD HL,DE\r
+ 00005E2A 4E 3530 LD C,(HL)\r
+ 00005E2B 23 3531 INC HL\r
+ 00005E2C 46 3532 LD B,(HL)\r
+ 00005E2D E1 3533 POP HL\r
+ 00005E2E A7 3534 AND A\r
+ 00005E2F ED 42 3535 SBC HL,BC\r
+ 00005E31 28 03 3536 JR Z,?0251\r
+ 00005E33 3537 ?0250:\r
+ 00005E33 CD E7 54 3538 CALL LWRD ?0473\r
+ 00005E36 3539 ?0251:\r
+ 00005E36 DD CB 0A 46 3540 BIT 0,(IX+10)\r
+ 00005E3A 28 21 3541 JR Z,?0253\r
+ 00005E3C 3542 ?0252:\r
+ 00005E3C 21 00 00 3543 LD HL,0\r
+ 00005E3F 39 3544 ADD HL,SP\r
+ 00005E40 E5 3545 PUSH HL\r
+ 00005E41 CD 4E 53 3546 CALL LWRD ?0467\r
+ 00005E44 E1 3547 POP HL\r
+ 00005E45 21 00 00 3548 LD HL,0\r
+ 00005E48 39 3549 ADD HL,SP\r
+ 00005E49 4E 3550 LD C,(HL)\r
+ 00005E4A 23 3551 INC HL\r
+ 00005E4B 46 3552 LD B,(HL)\r
+ 00005E4C C5 3553 PUSH BC\r
+ 00005E4D 23 3554 INC HL\r
+ 00005E4E 4E 3555 LD C,(HL)\r
+ 00005E4F 23 3556 INC HL\r
+ 00005E50 46 3557 LD B,(HL)\r
+ 00005E51 DD E5 3558 PUSH IX\r
+ 00005E53 D1 3559 POP DE\r
+ 00005E54 3E 00 3560 LD A,BYTE3 Button_drawtext\r
+ 00005E56 21 43 56 3561 LD HL,LWRD Button_drawtext\r
+ 00005E59 CD 5E 81 3562 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005E5C E1 3563 POP HL\r
+ 00005E5D 3564 ?0253:\r
+ 00005E5D C3 CF 57 3565 JP LWRD ?0178\r
+ 00005E60 3566 Label_new:\r
+ 00005E60 CD 88 81 3567 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00005E63 00 00 3568 DEFW 0\r
+ 00005E65 FD E5 3569 PUSH IY\r
+ 00005E67 DD 6E 0C 3570 LD L,(IX+12)\r
+ 00005E6A DD 66 0D 3571 LD H,(IX+13)\r
+ 00005E6D E5 3572 PUSH HL\r
+ 00005E6E DD 6E 0A 3573 LD L,(IX+10)\r
+ 00005E71 DD 66 0B 3574 LD H,(IX+11)\r
+ 00005E74 E5 3575 PUSH HL\r
+ 00005E75 CD 7E 55 3576 CALL LWRD ?0438\r
+ 00005E78 F1 3577 POP AF\r
+ 00005E79 F1 3578 POP AF\r
+ 00005E7A E5 3579 PUSH HL\r
+ 00005E7B FD E1 3580 POP IY\r
+ 00005E7D 01 20 00 3581 LD BC,32\r
+ 00005E80 09 3582 ADD HL,BC\r
+ 00005E81 DD 4E 0E 3583 LD C,(IX+14)\r
+ 00005E84 71 3584 LD (HL),C\r
+ 00005E85 DD 46 0F 3585 LD B,(IX+15)\r
+ 00005E88 23 3586 INC HL\r
+ 00005E89 70 3587 LD (HL),B\r
+ 00005E8A FD 36 0A 01 3588 LD (IY+10),1\r
+ 00005E8E FD 36 0B 00 3589 LD (IY+11),0\r
+ 00005E92 FD 36 17 F9 3590 LD (IY+23),LOW(Label_handler)\r
+ 00005E96 FD 36 18 5D 3591 LD (IY+24),HIGH(Label_handler)\r
+ 00005E9A FD 36 19 00 3592 LD (IY+25),BYTE3 Label_handler\r
+ 00005E9E FD 36 1A FF 3593 LD (IY+26),LOW(Label_paint)\r
+ 00005EA2 FD 36 1B 5D 3594 LD (IY+27),HIGH(Label_paint)\r
+ 00005EA6 FD 36 1C 00 3595 LD (IY+28),BYTE3 Label_paint\r
+ 00005EAA FD 36 1D F8 3596 LD (IY+29),LOW(Button_add)\r
+ 00005EAE FD 36 1E 57 3597 LD (IY+30),HIGH(Button_add)\r
+ 00005EB2 FD 36 1F 00 3598 LD (IY+31),BYTE3 Button_add\r
+ 00005EB6 C3 1A 4C 3599 JP LWRD ?0418\r
+ 00005EB9 3600 rootWindow_handler:\r
+ 00005EB9 CD 88 81 3601 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00005EBC 00 00 3602 DEFW 0\r
+ 00005EBE DD 6E 0A 3603 LD L,(IX+10)\r
+ 00005EC1 DD 66 0B 3604 LD H,(IX+11)\r
+ 00005EC4 E5 3605 PUSH HL\r
+ 00005EC5 DD 5E 02 3606 LD E,(IX+2)\r
+ 00005EC8 DD 56 03 3607 LD D,(IX+3)\r
+ 00005ECB 3E 00 3608 LD A,BYTE3 Window_handler\r
+ 00005ECD 21 9B 50 3609 LD HL,LWRD Window_handler\r
+ 00005ED0 CD 5E 81 3610 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005ED3 E1 3611 POP HL\r
+ 00005ED4 C3 1F 81 3612 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 00005ED7 3613 screenbuilder:\r
+ 00005ED7 CD 88 81 3614 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00005EDA CE FF 3615 DEFW 65486\r
+ 00005EDC FD E5 3616 PUSH IY\r
+ 00005EDE DD 36 D8 00 3617 LD (IX-40),0\r
+ 00005EE2 21 00 00 3618 LD HL,0\r
+ 00005EE5 E5 3619 PUSH HL\r
+ 00005EE6 C5 3620 PUSH BC\r
+ 00005EE7 3E 01 3621 LD A,BYTE3 open\r
+ 00005EE9 21 AD 42 3622 LD HL,LWRD open\r
+ 00005EEC CD 5E 81 3623 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005EEF F1 3624 POP AF\r
+ 00005EF0 F1 3625 POP AF\r
+ 00005EF1 DD 75 D4 3626 LD (IX-44),L\r
+ 00005EF4 DD 74 D5 3627 LD (IX-43),H\r
+ 00005EF7 DD 36 F0 2B 3628 LD (IX-16),43\r
+ 00005EFB DD 36 F1 00 3629 LD (IX-15),0\r
+ 00005EFF DD 36 F2 1A 3630 LD (IX-14),26\r
+ 00005F03 DD 36 F3 00 3631 LD (IX-13),0\r
+ 00005F07 3632 ?0256:\r
+ 00005F07 DD 36 F4 00 3633 LD (IX-12),0\r
+ 00005F0B DD 7E D8 3634 LD A,(IX-40)\r
+ 00005F0E FE 73 3635 CP 115\r
+ 00005F10 20 18 3636 JR NZ,?0258\r
+ 00005F12 3637 ?0257:\r
+ 00005F12 DD 6E D9 3638 LD L,(IX-39)\r
+ 00005F15 DD 66 DA 3639 LD H,(IX-38)\r
+ 00005F18 DD 75 F0 3640 LD (IX-16),L\r
+ 00005F1B DD 74 F1 3641 LD (IX-15),H\r
+ 00005F1E DD 6E DB 3642 LD L,(IX-37)\r
+ 00005F21 DD 66 DC 3643 LD H,(IX-36)\r
+ 00005F24 DD 75 F2 3644 LD (IX-14),L\r
+ 00005F27 DD 74 F3 3645 LD (IX-13),H\r
+ 00005F2A 3646 ?0258:\r
+ 00005F2A DD 7E D8 3647 LD A,(IX-40)\r
+ 00005F2D FE 42 3648 CP 66\r
+ 00005F2F 28 07 3649 JR Z,?0261\r
+ 00005F31 DD 7E D8 3650 LD A,(IX-40)\r
+ 00005F34 FE 4D 3651 CP 77\r
+ 00005F36 20 4F 3652 JR NZ,?0260\r
+ 00005F38 3653 ?0261:\r
+ 00005F38 3654 ?0262:\r
+ 00005F38 3655 ?0259:\r
+ 00005F38 DD 4E DD 3656 LD C,(IX-35)\r
+ 00005F3B 06 00 3657 LD B,0\r
+ 00005F3D C5 3658 PUSH BC\r
+ 00005F3E CD 97 62 3659 CALL LWRD ?0482\r
+ 00005F41 D5 3660 PUSH DE\r
+ 00005F42 DD 4E DB 3661 LD C,(IX-37)\r
+ 00005F45 DD 5E F0 3662 LD E,(IX-16)\r
+ 00005F48 DD 56 F1 3663 LD D,(IX-15)\r
+ 00005F4B CD A0 62 3664 CALL LWRD ?0483\r
+ 00005F4E D5 3665 PUSH DE\r
+ 00005F4F DD 4E DA 3666 LD C,(IX-38)\r
+ 00005F52 DD 5E F2 3667 LD E,(IX-14)\r
+ 00005F55 DD 56 F3 3668 LD D,(IX-13)\r
+ 00005F58 CD 2A 81 3669 CALL LWRD ?S_MUL_L02\r
+ 00005F5B D5 3670 PUSH DE\r
+ 00005F5C DD 5E D9 3671 LD E,(IX-39)\r
+ 00005F5F 50 3672 LD D,B\r
+ 00005F60 DD 4E F0 3673 LD C,(IX-16)\r
+ 00005F63 DD 46 F1 3674 LD B,(IX-15)\r
+ 00005F66 CD 2A 81 3675 CALL LWRD ?S_MUL_L02\r
+ 00005F69 3E 00 3676 LD A,BYTE3 Button_new\r
+ 00005F6B 21 FE 57 3677 LD HL,LWRD Button_new\r
+ 00005F6E C1 3678 POP BC\r
+ 00005F6F CD 5E 81 3679 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005F72 F1 3680 POP AF\r
+ 00005F73 F1 3681 POP AF\r
+ 00005F74 F1 3682 POP AF\r
+ 00005F75 E5 3683 PUSH HL\r
+ 00005F76 FD E1 3684 POP IY\r
+ 00005F78 DD 7E D8 3685 LD A,(IX-40)\r
+ 00005F7B FE 4D 3686 CP 77\r
+ 00005F7D 20 04 3687 JR NZ,?0264\r
+ 00005F7F 3688 ?0263:\r
+ 00005F7F FD CB 0A F6 3689 SET 6,(IY+10)\r
+ 00005F83 3690 ?0264:\r
+ 00005F83 DD 36 F4 01 3691 LD (IX-12),1\r
+ 00005F87 3692 ?0260:\r
+ 00005F87 DD 7E D8 3693 LD A,(IX-40)\r
+ 00005F8A FE 54 3694 CP 84\r
+ 00005F8C 20 44 3695 JR NZ,?0266\r
+ 00005F8E 3696 ?0265:\r
+ 00005F8E DD 4E DD 3697 LD C,(IX-35)\r
+ 00005F91 06 00 3698 LD B,0\r
+ 00005F93 C5 3699 PUSH BC\r
+ 00005F94 CD 97 62 3700 CALL LWRD ?0482\r
+ 00005F97 D5 3701 PUSH DE\r
+ 00005F98 DD 4E DB 3702 LD C,(IX-37)\r
+ 00005F9B DD 5E F0 3703 LD E,(IX-16)\r
+ 00005F9E DD 56 F1 3704 LD D,(IX-15)\r
+ 00005FA1 CD A0 62 3705 CALL LWRD ?0483\r
+ 00005FA4 D5 3706 PUSH DE\r
+ 00005FA5 DD 4E DA 3707 LD C,(IX-38)\r
+ 00005FA8 DD 5E F2 3708 LD E,(IX-14)\r
+ 00005FAB DD 56 F3 3709 LD D,(IX-13)\r
+ 00005FAE CD 2A 81 3710 CALL LWRD ?S_MUL_L02\r
+ 00005FB1 D5 3711 PUSH DE\r
+ 00005FB2 DD 5E D9 3712 LD E,(IX-39)\r
+ 00005FB5 50 3713 LD D,B\r
+ 00005FB6 DD 4E F0 3714 LD C,(IX-16)\r
+ 00005FB9 DD 46 F1 3715 LD B,(IX-15)\r
+ 00005FBC CD 2A 81 3716 CALL LWRD ?S_MUL_L02\r
+ 00005FBF 3E 00 3717 LD A,BYTE3 ToggleButton_new\r
+ 00005FC1 21 D8 59 3718 LD HL,LWRD ToggleButton_new\r
+ 00005FC4 C1 3719 POP BC\r
+ 00005FC5 CD 5E 81 3720 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00005FC8 F1 3721 POP AF\r
+ 00005FC9 F1 3722 POP AF\r
+ 00005FCA F1 3723 POP AF\r
+ 00005FCB E5 3724 PUSH HL\r
+ 00005FCC FD E1 3725 POP IY\r
+ 00005FCE DD 36 F4 01 3726 LD (IX-12),1\r
+ 00005FD2 3727 ?0266:\r
+ 00005FD2 DD 7E D8 3728 LD A,(IX-40)\r
+ 00005FD5 FE 44 3729 CP 68\r
+ 00005FD7 20 44 3730 JR NZ,?0268\r
+ 00005FD9 3731 ?0267:\r
+ 00005FD9 DD 4E DD 3732 LD C,(IX-35)\r
+ 00005FDC 06 00 3733 LD B,0\r
+ 00005FDE C5 3734 PUSH BC\r
+ 00005FDF CD 97 62 3735 CALL LWRD ?0482\r
+ 00005FE2 D5 3736 PUSH DE\r
+ 00005FE3 DD 4E DB 3737 LD C,(IX-37)\r
+ 00005FE6 DD 5E F0 3738 LD E,(IX-16)\r
+ 00005FE9 DD 56 F1 3739 LD D,(IX-15)\r
+ 00005FEC CD A0 62 3740 CALL LWRD ?0483\r
+ 00005FEF D5 3741 PUSH DE\r
+ 00005FF0 DD 4E DA 3742 LD C,(IX-38)\r
+ 00005FF3 DD 5E F2 3743 LD E,(IX-14)\r
+ 00005FF6 DD 56 F3 3744 LD D,(IX-13)\r
+ 00005FF9 CD 2A 81 3745 CALL LWRD ?S_MUL_L02\r
+ 00005FFC D5 3746 PUSH DE\r
+ 00005FFD DD 5E D9 3747 LD E,(IX-39)\r
+ 00006000 50 3748 LD D,B\r
+ 00006001 DD 4E F0 3749 LD C,(IX-16)\r
+ 00006004 DD 46 F1 3750 LD B,(IX-15)\r
+ 00006007 CD 2A 81 3751 CALL LWRD ?S_MUL_L02\r
+ 0000600A 3E 00 3752 LD A,BYTE3 Display_new\r
+ 0000600C 21 9F 5D 3753 LD HL,LWRD Display_new\r
+ 0000600F C1 3754 POP BC\r
+ 00006010 CD 5E 81 3755 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006013 F1 3756 POP AF\r
+ 00006014 F1 3757 POP AF\r
+ 00006015 F1 3758 POP AF\r
+ 00006016 E5 3759 PUSH HL\r
+ 00006017 FD E1 3760 POP IY\r
+ 00006019 DD 36 F4 01 3761 LD (IX-12),1\r
+ 0000601D 3762 ?0268:\r
+ 0000601D DD 7E D8 3763 LD A,(IX-40)\r
+ 00006020 FE 4C 3764 CP 76\r
+ 00006022 20 47 3765 JR NZ,?0270\r
+ 00006024 3766 ?0269:\r
+ 00006024 21 0C 00 3767 LD HL,12\r
+ 00006027 39 3768 ADD HL,SP\r
+ 00006028 01 12 00 3769 LD BC,18\r
+ 0000602B 09 3770 ADD HL,BC\r
+ 0000602C E5 3771 PUSH HL\r
+ 0000602D CD 97 62 3772 CALL LWRD ?0482\r
+ 00006030 D5 3773 PUSH DE\r
+ 00006031 DD 4E DB 3774 LD C,(IX-37)\r
+ 00006034 DD 5E F0 3775 LD E,(IX-16)\r
+ 00006037 DD 56 F1 3776 LD D,(IX-15)\r
+ 0000603A CD A0 62 3777 CALL LWRD ?0483\r
+ 0000603D D5 3778 PUSH DE\r
+ 0000603E DD 4E DA 3779 LD C,(IX-38)\r
+ 00006041 DD 5E F2 3780 LD E,(IX-14)\r
+ 00006044 DD 56 F3 3781 LD D,(IX-13)\r
+ 00006047 CD 2A 81 3782 CALL LWRD ?S_MUL_L02\r
+ 0000604A D5 3783 PUSH DE\r
+ 0000604B DD 5E D9 3784 LD E,(IX-39)\r
+ 0000604E 50 3785 LD D,B\r
+ 0000604F DD 4E F0 3786 LD C,(IX-16)\r
+ 00006052 DD 46 F1 3787 LD B,(IX-15)\r
+ 00006055 CD 2A 81 3788 CALL LWRD ?S_MUL_L02\r
+ 00006058 3E 00 3789 LD A,BYTE3 Label_new\r
+ 0000605A 21 60 5E 3790 LD HL,LWRD Label_new\r
+ 0000605D C1 3791 POP BC\r
+ 0000605E CD 5E 81 3792 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006061 F1 3793 POP AF\r
+ 00006062 F1 3794 POP AF\r
+ 00006063 F1 3795 POP AF\r
+ 00006064 E5 3796 PUSH HL\r
+ 00006065 FD E1 3797 POP IY\r
+ 00006067 DD 36 F4 01 3798 LD (IX-12),1\r
+ 0000606B 3799 ?0270:\r
+ 0000606B DD 7E D8 3800 LD A,(IX-40)\r
+ 0000606E FE 41 3801 CP 65\r
+ 00006070 20 51 3802 JR NZ,?0272\r
+ 00006072 3803 ?0271:\r
+ 00006072 21 26 00 3804 LD HL,38\r
+ 00006075 DD 4E 02 3805 LD C,(IX+2)\r
+ 00006078 DD 46 03 3806 LD B,(IX+3)\r
+ 0000607B 09 3807 ADD HL,BC\r
+ 0000607C E5 3808 PUSH HL\r
+ 0000607D 21 2B 00 3809 LD HL,43\r
+ 00006080 39 3810 ADD HL,SP\r
+ 00006081 EB 3811 EX DE,HL\r
+ 00006082 E1 3812 POP HL\r
+ 00006083 73 3813 LD (HL),E\r
+ 00006084 23 3814 INC HL\r
+ 00006085 72 3815 LD (HL),D\r
+ 00006086 DD 6E DE 3816 LD L,(IX-34)\r
+ 00006089 DD 66 DF 3817 LD H,(IX-33)\r
+ 0000608C DD 75 F8 3818 LD (IX-8),L\r
+ 0000608F DD 74 F9 3819 LD (IX-7),H\r
+ 00006092 DD 6E E0 3820 LD L,(IX-32)\r
+ 00006095 DD 66 E1 3821 LD H,(IX-31)\r
+ 00006098 DD 75 FA 3822 LD (IX-6),L\r
+ 0000609B DD 74 FB 3823 LD (IX-5),H\r
+ 0000609E 21 16 00 3824 LD HL,22\r
+ 000060A1 39 3825 ADD HL,SP\r
+ 000060A2 4E 3826 LD C,(HL)\r
+ 000060A3 23 3827 INC HL\r
+ 000060A4 46 3828 LD B,(HL)\r
+ 000060A5 23 3829 INC HL\r
+ 000060A6 5E 3830 LD E,(HL)\r
+ 000060A7 23 3831 INC HL\r
+ 000060A8 56 3832 LD D,(HL)\r
+ 000060A9 DD 71 FC 3833 LD (IX-4),C\r
+ 000060AC DD 70 FD 3834 LD (IX-3),B\r
+ 000060AF DD 73 FE 3835 LD (IX-2),E\r
+ 000060B2 DD 72 FF 3836 LD (IX-1),D\r
+ 000060B5 DD 5E 02 3837 LD E,(IX+2)\r
+ 000060B8 DD 56 03 3838 LD D,(IX+3)\r
+ 000060BB 3E 00 3839 LD A,BYTE3 root_actionhandler\r
+ 000060BD 21 A7 62 3840 LD HL,LWRD root_actionhandler\r
+ 000060C0 CD 5E 81 3841 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000060C3 3842 ?0272:\r
+ 000060C3 DD 7E D8 3843 LD A,(IX-40)\r
+ 000060C6 FE 53 3844 CP 83\r
+ 000060C8 20 71 3845 JR NZ,?0274\r
+ 000060CA 3846 ?0273:\r
+ 000060CA 21 0C 00 3847 LD HL,12\r
+ 000060CD 39 3848 ADD HL,SP\r
+ 000060CE 4D 3849 LD C,L\r
+ 000060CF 44 3850 LD B,H\r
+ 000060D0 DD 5E D4 3851 LD E,(IX-44)\r
+ 000060D3 DD 56 D5 3852 LD D,(IX-43)\r
+ 000060D6 3E 00 3853 LD A,BYTE3 read_stringtable\r
+ 000060D8 21 DF 65 3854 LD HL,LWRD read_stringtable\r
+ 000060DB CD 5E 81 3855 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000060DE 21 26 00 3856 LD HL,38\r
+ 000060E1 DD 4E 02 3857 LD C,(IX+2)\r
+ 000060E4 DD 46 03 3858 LD B,(IX+3)\r
+ 000060E7 09 3859 ADD HL,BC\r
+ 000060E8 E5 3860 PUSH HL\r
+ 000060E9 11 04 00 3861 LD DE,4\r
+ 000060EC CD 8F 62 3862 CALL LWRD ?0454\r
+ 000060EF EB 3863 EX DE,HL\r
+ 000060F0 E1 3864 POP HL\r
+ 000060F1 73 3865 LD (HL),E\r
+ 000060F2 23 3866 INC HL\r
+ 000060F3 72 3867 LD (HL),D\r
+ 000060F4 21 26 00 3868 LD HL,38\r
+ 000060F7 09 3869 ADD HL,BC\r
+ 000060F8 56 3870 LD D,(HL)\r
+ 000060F9 DD 72 F5 3871 LD (IX-11),D\r
+ 000060FC 23 3872 INC HL\r
+ 000060FD 66 3873 LD H,(HL)\r
+ 000060FE DD 74 F6 3874 LD (IX-10),H\r
+ 00006101 21 24 00 3875 LD HL,36\r
+ 00006104 09 3876 ADD HL,BC\r
+ 00006105 36 04 3877 LD (HL),4\r
+ 00006107 23 3878 INC HL\r
+ 00006108 36 00 3879 LD (HL),0\r
+ 0000610A 6A 3880 LD L,D\r
+ 0000610B DD 66 F6 3881 LD H,(IX-10)\r
+ 0000610E 23 3882 INC HL\r
+ 0000610F 23 3883 INC HL\r
+ 00006110 E5 3884 PUSH HL\r
+ 00006111 21 08 00 3885 LD HL,8\r
+ 00006114 ED 4B C0 86 3886 LD BC,(global)\r
+ 00006118 09 3887 ADD HL,BC\r
+ 00006119 5E 3888 LD E,(HL)\r
+ 0000611A 23 3889 INC HL\r
+ 0000611B 56 3890 LD D,(HL)\r
+ 0000611C E1 3891 POP HL\r
+ 0000611D 73 3892 LD (HL),E\r
+ 0000611E 23 3893 INC HL\r
+ 0000611F 72 3894 LD (HL),D\r
+ 00006120 21 06 00 3895 LD HL,6\r
+ 00006123 ED 4B C0 86 3896 LD BC,(global)\r
+ 00006127 09 3897 ADD HL,BC\r
+ 00006128 46 3898 LD B,(HL)\r
+ 00006129 23 3899 INC HL\r
+ 0000612A 66 3900 LD H,(HL)\r
+ 0000612B 68 3901 LD L,B\r
+ 0000612C E5 3902 PUSH HL\r
+ 0000612D DD 6E F5 3903 LD L,(IX-11)\r
+ 00006130 DD 66 F6 3904 LD H,(IX-10)\r
+ 00006133 C1 3905 POP BC\r
+ 00006134 71 3906 LD (HL),C\r
+ 00006135 23 3907 INC HL\r
+ 00006136 70 3908 LD (HL),B\r
+ 00006137 DD 36 F4 00 3909 LD (IX-12),0\r
+ 0000613B 3910 ?0274:\r
+ 0000613B AF 3911 XOR A\r
+ 0000613C DD B6 F4 3912 OR (IX-12)\r
+ 0000613F CA 3B 62 3913 JP Z,?0276\r
+ 00006142 3914 ?0275:\r
+ 00006142 DD 7E DE 3915 LD A,(IX-34)\r
+ 00006145 DD B6 DF 3916 OR (IX-33)\r
+ 00006148 28 69 3917 JR Z,?0278\r
+ 0000614A 3918 ?0277:\r
+ 0000614A FD CB 0A EE 3919 SET 5,(IY+10)\r
+ 0000614E FD 36 24 0B 3920 LD (IY+36),11\r
+ 00006152 FD 36 25 00 3921 LD (IY+37),0\r
+ 00006156 11 0B 00 3922 LD DE,11\r
+ 00006159 CD 8F 62 3923 CALL LWRD ?0454\r
+ 0000615C FD 75 26 3924 LD (IY+38),L\r
+ 0000615F FD 74 27 3925 LD (IY+39),H\r
+ 00006162 FD 6E 26 3926 LD L,(IY+38)\r
+ 00006165 DD 75 D0 3927 LD (IX-48),L\r
+ 00006168 FD 66 27 3928 LD H,(IY+39)\r
+ 0000616B DD 74 D1 3929 LD (IX-47),H\r
+ 0000616E 36 A7 3930 LD (HL),LOW(root_actionhandler)\r
+ 00006170 23 3931 INC HL\r
+ 00006171 36 62 3932 LD (HL),HIGH(root_actionhandler)\r
+ 00006173 23 3933 INC HL\r
+ 00006174 36 00 3934 LD (HL),BYTE3 root_actionhandler\r
+ 00006176 DD 6E D0 3935 LD L,(IX-48)\r
+ 00006179 DD 66 D1 3936 LD H,(IX-47)\r
+ 0000617C 23 3937 INC HL\r
+ 0000617D 23 3938 INC HL\r
+ 0000617E 23 3939 INC HL\r
+ 0000617F DD 4E DE 3940 LD C,(IX-34)\r
+ 00006182 71 3941 LD (HL),C\r
+ 00006183 DD 46 DF 3942 LD B,(IX-33)\r
+ 00006186 23 3943 INC HL\r
+ 00006187 70 3944 LD (HL),B\r
+ 00006188 21 05 00 3945 LD HL,5\r
+ 0000618B DD 4E D0 3946 LD C,(IX-48)\r
+ 0000618E DD 46 D1 3947 LD B,(IX-47)\r
+ 00006191 09 3948 ADD HL,BC\r
+ 00006192 DD 5E E0 3949 LD E,(IX-32)\r
+ 00006195 73 3950 LD (HL),E\r
+ 00006196 DD 56 E1 3951 LD D,(IX-31)\r
+ 00006199 23 3952 INC HL\r
+ 0000619A 72 3953 LD (HL),D\r
+ 0000619B 21 07 00 3954 LD HL,7\r
+ 0000619E 09 3955 ADD HL,BC\r
+ 0000619F E5 3956 PUSH HL\r
+ 000061A0 21 18 00 3957 LD HL,24\r
+ 000061A3 39 3958 ADD HL,SP\r
+ 000061A4 5E 3959 LD E,(HL)\r
+ 000061A5 23 3960 INC HL\r
+ 000061A6 56 3961 LD D,(HL)\r
+ 000061A7 23 3962 INC HL\r
+ 000061A8 4E 3963 LD C,(HL)\r
+ 000061A9 23 3964 INC HL\r
+ 000061AA 46 3965 LD B,(HL)\r
+ 000061AB E1 3966 POP HL\r
+ 000061AC 73 3967 LD (HL),E\r
+ 000061AD 23 3968 INC HL\r
+ 000061AE 72 3969 LD (HL),D\r
+ 000061AF 23 3970 INC HL\r
+ 000061B0 71 3971 LD (HL),C\r
+ 000061B1 23 3972 INC HL\r
+ 000061B2 70 3973 LD (HL),B\r
+ 000061B3 3974 ?0278:\r
+ 000061B3 DD 7E E6 3975 LD A,(IX-26)\r
+ 000061B6 DD B6 E7 3976 OR (IX-25)\r
+ 000061B9 28 0C 3977 JR Z,?0280\r
+ 000061BB 3978 ?0279:\r
+ 000061BB DD 6E E6 3979 LD L,(IX-26)\r
+ 000061BE FD 75 0A 3980 LD (IY+10),L\r
+ 000061C1 DD 66 E7 3981 LD H,(IX-25)\r
+ 000061C4 FD 74 0B 3982 LD (IY+11),H\r
+ 000061C7 3983 ?0280:\r
+ 000061C7 DD 6E E8 3984 LD L,(IX-24)\r
+ 000061CA FD 75 0E 3985 LD (IY+14),L\r
+ 000061CD DD 66 E9 3986 LD H,(IX-23)\r
+ 000061D0 FD 74 0F 3987 LD (IY+15),H\r
+ 000061D3 DD 6E EA 3988 LD L,(IX-22)\r
+ 000061D6 FD 75 20 3989 LD (IY+32),L\r
+ 000061D9 DD 7E EB 3990 LD A,(IX-21)\r
+ 000061DC E6 0F 3991 AND 15\r
+ 000061DE FD 77 21 3992 LD (IY+33),A\r
+ 000061E1 FD 7E 20 3993 LD A,(IY+32)\r
+ 000061E4 FD B6 21 3994 OR (IY+33)\r
+ 000061E7 20 16 3995 JR NZ,?0282\r
+ 000061E9 3996 ?0281:\r
+ 000061E9 11 14 00 3997 LD DE,20\r
+ 000061EC CD 8F 62 3998 CALL LWRD ?0454\r
+ 000061EF FD 75 20 3999 LD (IY+32),L\r
+ 000061F2 FD 74 21 4000 LD (IY+33),H\r
+ 000061F5 FD 6E 20 4001 LD L,(IY+32)\r
+ 000061F8 FD 66 21 4002 LD H,(IY+33)\r
+ 000061FB 36 00 4003 LD (HL),0\r
+ 000061FD 18 04 4004 JR ?0283\r
+ 000061FF 4005 ?0282:\r
+ 000061FF FD CB 0B F6 4006 SET 6,(IY+11)\r
+ 00006203 4007 ?0283:\r
+ 00006203 DD 7E EB 4008 LD A,(IX-21)\r
+ 00006206 2E 00 4009 LD L,0\r
+ 00006208 4D 4010 LD C,L\r
+ 00006209 E6 F0 4011 AND 240\r
+ 0000620B 47 4012 LD B,A\r
+ 0000620C 26 10 4013 LD H,16\r
+ 0000620E ED 42 4014 SBC HL,BC\r
+ 00006210 30 10 4015 JR NC,?0285\r
+ 00006212 4016 ?0284:\r
+ 00006212 DD 6E EA 4017 LD L,(IX-22)\r
+ 00006215 DD 7E EB 4018 LD A,(IX-21)\r
+ 00006218 E6 0F 4019 AND 15\r
+ 0000621A 67 4020 LD H,A\r
+ 0000621B 23 4021 INC HL\r
+ 0000621C FD 75 22 4022 LD (IY+34),L\r
+ 0000621F FD 74 23 4023 LD (IY+35),H\r
+ 00006222 4024 ?0285:\r
+ 00006222 FD E5 4025 PUSH IY\r
+ 00006224 DD 5E 02 4026 LD E,(IX+2)\r
+ 00006227 4B 4027 LD C,E\r
+ 00006228 DD 56 03 4028 LD D,(IX+3)\r
+ 0000622B 42 4029 LD B,D\r
+ 0000622C 21 1D 00 4030 LD HL,29\r
+ 0000622F 09 4031 ADD HL,BC\r
+ 00006230 4E 4032 LD C,(HL)\r
+ 00006231 23 4033 INC HL\r
+ 00006232 46 4034 LD B,(HL)\r
+ 00006233 23 4035 INC HL\r
+ 00006234 7E 4036 LD A,(HL)\r
+ 00006235 69 4037 LD L,C\r
+ 00006236 60 4038 LD H,B\r
+ 00006237 C1 4039 POP BC\r
+ 00006238 CD 5E 81 4040 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000623B 4041 ?0276:\r
+ 0000623B 21 14 00 4042 LD HL,20\r
+ 0000623E E5 4043 PUSH HL\r
+ 0000623F 2E 0E 4044 LD L,14\r
+ 00006241 39 4045 ADD HL,SP\r
+ 00006242 4D 4046 LD C,L\r
+ 00006243 44 4047 LD B,H\r
+ 00006244 DD 5E D4 4048 LD E,(IX-44)\r
+ 00006247 DD 56 D5 4049 LD D,(IX-43)\r
+ 0000624A CD 87 62 4050 CALL LWRD ?0441\r
+ 0000624D F1 4051 POP AF\r
+ 0000624E 3E 14 4052 LD A,20\r
+ 00006250 AD 4053 XOR L\r
+ 00006251 B4 4054 OR H\r
+ 00006252 CA 07 5F 4055 JP Z,?0256\r
+ 00006255 4056 ?0254:\r
+ 00006255 DD 5E D4 4057 LD E,(IX-44)\r
+ 00006258 DD 56 D5 4058 LD D,(IX-43)\r
+ 0000625B 3E 00 4059 LD A,BYTE3 close\r
+ 0000625D 21 2B 72 4060 LD HL,LWRD close\r
+ 00006260 CD 5E 81 4061 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006263 DD 5E 02 4062 LD E,(IX+2)\r
+ 00006266 DD 56 03 4063 LD D,(IX+3)\r
+ 00006269 3E 00 4064 LD A,BYTE3 Component_linkstringtable\r
+ 0000626B 21 E8 4F 4065 LD HL,LWRD Component_linkstringtable\r
+ 0000626E CD 5E 81 4066 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006271 DD 5E 02 4067 LD E,(IX+2)\r
+ 00006274 4B 4068 LD C,E\r
+ 00006275 DD 56 03 4069 LD D,(IX+3)\r
+ 00006278 42 4070 LD B,D\r
+ 00006279 21 1A 00 4071 LD HL,26\r
+ 0000627C 09 4072 ADD HL,BC\r
+ 0000627D 4E 4073 LD C,(HL)\r
+ 0000627E 23 4074 INC HL\r
+ 0000627F 46 4075 LD B,(HL)\r
+ 00006280 23 4076 INC HL\r
+ 00006281 7E 4077 LD A,(HL)\r
+ 00006282 69 4078 LD L,C\r
+ 00006283 60 4079 LD H,B\r
+ 00006284 C3 E8 56 4080 JP LWRD ?0424\r
+ 00006287 4081 ?0441:\r
+ 00006287 3E 01 4082 LD A,BYTE3 _read\r
+ 00006289 21 34 45 4083 LD HL,LWRD _read\r
+ 0000628C C3 5E 81 4084 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000628F 4085 ?0454:\r
+ 0000628F 3E 01 4086 LD A,BYTE3 malloc\r
+ 00006291 21 D8 42 4087 LD HL,LWRD malloc\r
+ 00006294 C3 5E 81 4088 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006297 4089 ?0482:\r
+ 00006297 DD 4E DC 4090 LD C,(IX-36)\r
+ 0000629A DD 5E F2 4091 LD E,(IX-14)\r
+ 0000629D DD 56 F3 4092 LD D,(IX-13)\r
+ 000062A0 4093 ?0483:\r
+ 000062A0 CD 2A 81 4094 CALL LWRD ?S_MUL_L02\r
+ 000062A3 1B 4095 DEC DE\r
+ 000062A4 1B 4096 DEC DE\r
+ 000062A5 1B 4097 DEC DE\r
+ 000062A6 C9 4098 RET\r
+ 000062A7 4099 root_actionhandler:\r
+ 000062A7 CD 88 81 4100 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000062AA EA FF 4101 DEFW 65514\r
+ 000062AC FD E5 4102 PUSH IY\r
+ 000062AE DD 6E 02 4103 LD L,(IX+2)\r
+ 000062B1 DD 66 03 4104 LD H,(IX+3)\r
+ 000062B4 E5 4105 PUSH HL\r
+ 000062B5 FD E1 4106 POP IY\r
+ 000062B7 21 06 00 4107 LD HL,6\r
+ 000062BA 39 4108 ADD HL,SP\r
+ 000062BB EB 4109 EX DE,HL\r
+ 000062BC 21 A7 84 4110 LD HL,?0286\r
+ 000062BF 01 0E 00 4111 LD BC,14\r
+ 000062C2 ED B0 4112 LDIR\r
+ 000062C4 FD 6E 26 4113 LD L,(IY+38)\r
+ 000062C7 DD 75 EA 4114 LD (IX-22),L\r
+ 000062CA FD 66 27 4115 LD H,(IY+39)\r
+ 000062CD DD 74 EB 4116 LD (IX-21),H\r
+ 000062D0 23 4117 INC HL\r
+ 000062D1 23 4118 INC HL\r
+ 000062D2 23 4119 INC HL\r
+ 000062D3 3E 01 4120 LD A,1\r
+ 000062D5 AE 4121 XOR (HL)\r
+ 000062D6 23 4122 INC HL\r
+ 000062D7 B6 4123 OR (HL)\r
+ 000062D8 20 08 4124 JR NZ,?0288\r
+ 000062DA 4125 ?0287:\r
+ 000062DA C5 4126 PUSH BC\r
+ 000062DB 01 01 04 4127 LD BC,1025\r
+ 000062DE CD 3F 53 4128 CALL LWRD ?0463\r
+ 000062E1 E1 4129 POP HL\r
+ 000062E2 4130 ?0288:\r
+ 000062E2 DD 6E EA 4131 LD L,(IX-22)\r
+ 000062E5 DD 66 EB 4132 LD H,(IX-21)\r
+ 000062E8 23 4133 INC HL\r
+ 000062E9 23 4134 INC HL\r
+ 000062EA 23 4135 INC HL\r
+ 000062EB 46 4136 LD B,(HL)\r
+ 000062EC 23 4137 INC HL\r
+ 000062ED 66 4138 LD H,(HL)\r
+ 000062EE 68 4139 LD L,B\r
+ 000062EF CB 85 4140 RES 0,L\r
+ 000062F1 3E 02 4141 LD A,2\r
+ 000062F3 AD 4142 XOR L\r
+ 000062F4 B4 4143 OR H\r
+ 000062F5 C2 12 64 4144 JP NZ,?0290\r
+ 000062F8 4145 ?0289:\r
+ 000062F8 6F 4146 LD L,A\r
+ 000062F9 67 4147 LD H,A\r
+ 000062FA E5 4148 PUSH HL\r
+ 000062FB E5 4149 PUSH HL\r
+ 000062FC 01 01 00 4150 LD BC,1\r
+ 000062FF FD 5E 11 4151 LD E,(IY+17)\r
+ 00006302 FD 56 12 4152 LD D,(IY+18)\r
+ 00006305 3E 00 4153 LD A,BYTE3 Component_changestate_children\r
+ 00006307 21 7F 4F 4154 LD HL,LWRD Component_changestate_children\r
+ 0000630A CD 5E 81 4155 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000630D E1 4156 POP HL\r
+ 0000630E E1 4157 POP HL\r
+ 0000630F FD 6E 11 4158 LD L,(IY+17)\r
+ 00006312 FD 66 12 4159 LD H,(IY+18)\r
+ 00006315 01 08 00 4160 LD BC,8\r
+ 00006318 09 4161 ADD HL,BC\r
+ 00006319 4E 4162 LD C,(HL)\r
+ 0000631A 23 4163 INC HL\r
+ 0000631B 46 4164 LD B,(HL)\r
+ 0000631C C5 4165 PUSH BC\r
+ 0000631D FD 6E 11 4166 LD L,(IY+17)\r
+ 00006320 FD 66 12 4167 LD H,(IY+18)\r
+ 00006323 01 06 00 4168 LD BC,6\r
+ 00006326 09 4169 ADD HL,BC\r
+ 00006327 4E 4170 LD C,(HL)\r
+ 00006328 23 4171 INC HL\r
+ 00006329 46 4172 LD B,(HL)\r
+ 0000632A C5 4173 PUSH BC\r
+ 0000632B 01 00 00 4174 LD BC,0\r
+ 0000632E 59 4175 LD E,C\r
+ 0000632F 50 4176 LD D,B\r
+ 00006330 3E 00 4177 LD A,BYTE3 Window_new\r
+ 00006332 21 3A 55 4178 LD HL,LWRD Window_new\r
+ 00006335 CD 5E 81 4179 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006338 F1 4180 POP AF\r
+ 00006339 F1 4181 POP AF\r
+ 0000633A DD 75 EC 4182 LD (IX-20),L\r
+ 0000633D DD 74 ED 4183 LD (IX-19),H\r
+ 00006340 01 0A 00 4184 LD BC,10\r
+ 00006343 09 4185 ADD HL,BC\r
+ 00006344 36 03 4186 LD (HL),3\r
+ 00006346 23 4187 INC HL\r
+ 00006347 70 4188 LD (HL),B\r
+ 00006348 DD 6E EA 4189 LD L,(IX-22)\r
+ 0000634B DD 66 EB 4190 LD H,(IX-21)\r
+ 0000634E 23 4191 INC HL\r
+ 0000634F 23 4192 INC HL\r
+ 00006350 23 4193 INC HL\r
+ 00006351 CB 46 4194 BIT 0,(HL)\r
+ 00006353 28 0C 4195 JR Z,?0292\r
+ 00006355 4196 ?0291:\r
+ 00006355 69 4197 LD L,C\r
+ 00006356 60 4198 LD H,B\r
+ 00006357 DD 4E EC 4199 LD C,(IX-20)\r
+ 0000635A DD 46 ED 4200 LD B,(IX-19)\r
+ 0000635D 09 4201 ADD HL,BC\r
+ 0000635E 23 4202 INC HL\r
+ 0000635F CB EE 4203 SET 5,(HL)\r
+ 00006361 4204 ?0292:\r
+ 00006361 21 17 00 4205 LD HL,23\r
+ 00006364 DD 4E EC 4206 LD C,(IX-20)\r
+ 00006367 DD 46 ED 4207 LD B,(IX-19)\r
+ 0000636A 09 4208 ADD HL,BC\r
+ 0000636B 36 B9 4209 LD (HL),LOW(rootWindow_handler)\r
+ 0000636D 23 4210 INC HL\r
+ 0000636E 36 5E 4211 LD (HL),HIGH(rootWindow_handler)\r
+ 00006370 23 4212 INC HL\r
+ 00006371 36 00 4213 LD (HL),BYTE3 rootWindow_handler\r
+ 00006373 21 1A 00 4214 LD HL,26\r
+ 00006376 09 4215 ADD HL,BC\r
+ 00006377 36 F5 4216 LD (HL),LOW(Root_paint)\r
+ 00006379 23 4217 INC HL\r
+ 0000637A 36 54 4218 LD (HL),HIGH(Root_paint)\r
+ 0000637C 23 4219 INC HL\r
+ 0000637D 36 00 4220 LD (HL),BYTE3 Root_paint\r
+ 0000637F 21 07 00 4221 LD HL,7\r
+ 00006382 DD 5E EA 4222 LD E,(IX-22)\r
+ 00006385 DD 56 EB 4223 LD D,(IX-21)\r
+ 00006388 19 4224 ADD HL,DE\r
+ 00006389 5E 4225 LD E,(HL)\r
+ 0000638A EB 4226 EX DE,HL\r
+ 0000638B DD 75 F3 4227 LD (IX-13),L\r
+ 0000638E 21 07 00 4228 LD HL,7\r
+ 00006391 DD 4E EA 4229 LD C,(IX-22)\r
+ 00006394 DD 46 EB 4230 LD B,(IX-21)\r
+ 00006397 09 4231 ADD HL,BC\r
+ 00006398 5E 4232 LD E,(HL)\r
+ 00006399 23 4233 INC HL\r
+ 0000639A 56 4234 LD D,(HL)\r
+ 0000639B 23 4235 INC HL\r
+ 0000639C 4E 4236 LD C,(HL)\r
+ 0000639D 23 4237 INC HL\r
+ 0000639E 46 4238 LD B,(HL)\r
+ 0000639F EB 4239 EX DE,HL\r
+ 000063A0 3E 08 4240 LD A,8\r
+ 000063A2 CD F9 81 4241 CALL LWRD ?SL_RSH_L03\r
+ 000063A5 DD 75 F4 4242 LD (IX-12),L\r
+ 000063A8 21 07 00 4243 LD HL,7\r
+ 000063AB DD 4E EA 4244 LD C,(IX-22)\r
+ 000063AE DD 46 EB 4245 LD B,(IX-21)\r
+ 000063B1 09 4246 ADD HL,BC\r
+ 000063B2 5E 4247 LD E,(HL)\r
+ 000063B3 23 4248 INC HL\r
+ 000063B4 56 4249 LD D,(HL)\r
+ 000063B5 23 4250 INC HL\r
+ 000063B6 4E 4251 LD C,(HL)\r
+ 000063B7 23 4252 INC HL\r
+ 000063B8 46 4253 LD B,(HL)\r
+ 000063B9 EB 4254 EX DE,HL\r
+ 000063BA 3E 10 4255 LD A,16\r
+ 000063BC CD F9 81 4256 CALL LWRD ?SL_RSH_L03\r
+ 000063BF DD 75 F5 4257 LD (IX-11),L\r
+ 000063C2 21 07 00 4258 LD HL,7\r
+ 000063C5 DD 4E EA 4259 LD C,(IX-22)\r
+ 000063C8 DD 46 EB 4260 LD B,(IX-21)\r
+ 000063CB 09 4261 ADD HL,BC\r
+ 000063CC 5E 4262 LD E,(HL)\r
+ 000063CD 23 4263 INC HL\r
+ 000063CE 56 4264 LD D,(HL)\r
+ 000063CF 23 4265 INC HL\r
+ 000063D0 4E 4266 LD C,(HL)\r
+ 000063D1 23 4267 INC HL\r
+ 000063D2 46 4268 LD B,(HL)\r
+ 000063D3 EB 4269 EX DE,HL\r
+ 000063D4 3E 18 4270 LD A,24\r
+ 000063D6 CD F9 81 4271 CALL LWRD ?SL_RSH_L03\r
+ 000063D9 DD 75 F6 4272 LD (IX-10),L\r
+ 000063DC 21 06 00 4273 LD HL,6\r
+ 000063DF 39 4274 ADD HL,SP\r
+ 000063E0 4D 4275 LD C,L\r
+ 000063E1 44 4276 LD B,H\r
+ 000063E2 DD 5E EC 4277 LD E,(IX-20)\r
+ 000063E5 DD 56 ED 4278 LD D,(IX-19)\r
+ 000063E8 3E 00 4279 LD A,BYTE3 screenbuilder\r
+ 000063EA 21 D7 5E 4280 LD HL,LWRD screenbuilder\r
+ 000063ED CD 5E 81 4281 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000063F0 DD 4E EC 4282 LD C,(IX-20)\r
+ 000063F3 DD 46 ED 4283 LD B,(IX-19)\r
+ 000063F6 C5 4284 PUSH BC\r
+ 000063F7 FD 5E 11 4285 LD E,(IY+17)\r
+ 000063FA FD 56 12 4286 LD D,(IY+18)\r
+ 000063FD FD 6E 11 4287 LD L,(IY+17)\r
+ 00006400 FD 66 12 4288 LD H,(IY+18)\r
+ 00006403 01 1D 00 4289 LD BC,29\r
+ 00006406 09 4290 ADD HL,BC\r
+ 00006407 4E 4291 LD C,(HL)\r
+ 00006408 23 4292 INC HL\r
+ 00006409 46 4293 LD B,(HL)\r
+ 0000640A 23 4294 INC HL\r
+ 0000640B 7E 4295 LD A,(HL)\r
+ 0000640C 69 4296 LD L,C\r
+ 0000640D 60 4297 LD H,B\r
+ 0000640E C1 4298 POP BC\r
+ 0000640F CD 5E 81 4299 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006412 4300 ?0290:\r
+ 00006412 DD 6E EA 4301 LD L,(IX-22)\r
+ 00006415 DD 66 EB 4302 LD H,(IX-21)\r
+ 00006418 23 4303 INC HL\r
+ 00006419 23 4304 INC HL\r
+ 0000641A 23 4305 INC HL\r
+ 0000641B 3E 04 4306 LD A,4\r
+ 0000641D AE 4307 XOR (HL)\r
+ 0000641E 23 4308 INC HL\r
+ 0000641F B6 4309 OR (HL)\r
+ 00006420 C2 B0 65 4310 JP NZ,?0294\r
+ 00006423 4311 ?0293:\r
+ 00006423 21 01 00 4312 LD HL,1\r
+ 00006426 E5 4313 PUSH HL\r
+ 00006427 FD 6E 11 4314 LD L,(IY+17)\r
+ 0000642A FD 66 12 4315 LD H,(IY+18)\r
+ 0000642D 01 08 00 4316 LD BC,8\r
+ 00006430 09 4317 ADD HL,BC\r
+ 00006431 46 4318 LD B,(HL)\r
+ 00006432 23 4319 INC HL\r
+ 00006433 66 4320 LD H,(HL)\r
+ 00006434 68 4321 LD L,B\r
+ 00006435 01 F6 FF 4322 LD BC,65526\r
+ 00006438 09 4323 ADD HL,BC\r
+ 00006439 E5 4324 PUSH HL\r
+ 0000643A FD 6E 11 4325 LD L,(IY+17)\r
+ 0000643D FD 66 12 4326 LD H,(IY+18)\r
+ 00006440 01 06 00 4327 LD BC,6\r
+ 00006443 09 4328 ADD HL,BC\r
+ 00006444 46 4329 LD B,(HL)\r
+ 00006445 23 4330 INC HL\r
+ 00006446 66 4331 LD H,(HL)\r
+ 00006447 68 4332 LD L,B\r
+ 00006448 01 F6 FF 4333 LD BC,65526\r
+ 0000644B 09 4334 ADD HL,BC\r
+ 0000644C E5 4335 PUSH HL\r
+ 0000644D 01 05 00 4336 LD BC,5\r
+ 00006450 59 4337 LD E,C\r
+ 00006451 50 4338 LD D,B\r
+ 00006452 3E 00 4339 LD A,BYTE3 Dialog_new\r
+ 00006454 21 E3 5A 4340 LD HL,LWRD Dialog_new\r
+ 00006457 CD 5E 81 4341 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000645A F1 4342 POP AF\r
+ 0000645B F1 4343 POP AF\r
+ 0000645C F1 4344 POP AF\r
+ 0000645D DD 75 EC 4345 LD (IX-20),L\r
+ 00006460 DD 74 ED 4346 LD (IX-19),H\r
+ 00006463 01 0A 00 4347 LD BC,10\r
+ 00006466 09 4348 ADD HL,BC\r
+ 00006467 36 03 4349 LD (HL),3\r
+ 00006469 23 4350 INC HL\r
+ 0000646A 36 10 4351 LD (HL),16\r
+ 0000646C 21 0E 00 4352 LD HL,14\r
+ 0000646F DD 4E EC 4353 LD C,(IX-20)\r
+ 00006472 DD 46 ED 4354 LD B,(IX-19)\r
+ 00006475 09 4355 ADD HL,BC\r
+ 00006476 36 30 4356 LD (HL),48\r
+ 00006478 23 4357 INC HL\r
+ 00006479 36 00 4358 LD (HL),0\r
+ 0000647B AF 4359 XOR A\r
+ 0000647C DD 77 FE 4360 LD (IX-2),A\r
+ 0000647F DD 77 FF 4361 LD (IX-1),A\r
+ 00006482 4362 ?0296:\r
+ 00006482 21 05 00 4363 LD HL,5\r
+ 00006485 DD 4E EA 4364 LD C,(IX-22)\r
+ 00006488 DD 46 EB 4365 LD B,(IX-21)\r
+ 0000648B 09 4366 ADD HL,BC\r
+ 0000648C 5E 4367 LD E,(HL)\r
+ 0000648D 23 4368 INC HL\r
+ 0000648E 56 4369 LD D,(HL)\r
+ 0000648F 06 0C 4370 LD B,12\r
+ 00006491 CD 2E 82 4371 CALL LWRD ?SS_RSH_L02\r
+ 00006494 4B 4372 LD C,E\r
+ 00006495 42 4373 LD B,D\r
+ 00006496 DD 6E FE 4374 LD L,(IX-2)\r
+ 00006499 DD 66 FF 4375 LD H,(IX-1)\r
+ 0000649C CD A6 81 4376 CALL LWRD ?SS_CMP_L02\r
+ 0000649F 30 04 4377 JR NC,?0367\r
+ 000064A1 3E 01 4378 LD A,1\r
+ 000064A3 18 01 4379 JR ?0368\r
+ 000064A5 4380 ?0367:\r
+ 000064A5 AF 4381 XOR A\r
+ 000064A6 4382 ?0368:\r
+ 000064A6 E6 0F 4383 AND 15\r
+ 000064A8 CA 44 65 4384 JP Z,?0295\r
+ 000064AB 4385 ?0297:\r
+ 000064AB 21 05 00 4386 LD HL,5\r
+ 000064AE DD 4E EA 4387 LD C,(IX-22)\r
+ 000064B1 DD 46 EB 4388 LD B,(IX-21)\r
+ 000064B4 09 4389 ADD HL,BC\r
+ 000064B5 46 4390 LD B,(HL)\r
+ 000064B6 23 4391 INC HL\r
+ 000064B7 7E 4392 LD A,(HL)\r
+ 000064B8 68 4393 LD L,B\r
+ 000064B9 E6 0F 4394 AND 15\r
+ 000064BB 67 4395 LD H,A\r
+ 000064BC DD 4E FE 4396 LD C,(IX-2)\r
+ 000064BF DD 46 FF 4397 LD B,(IX-1)\r
+ 000064C2 09 4398 ADD HL,BC\r
+ 000064C3 29 4399 ADD HL,HL\r
+ 000064C4 E5 4400 PUSH HL\r
+ 000064C5 21 08 00 4401 LD HL,8\r
+ 000064C8 ED 5B C0 86 4402 LD DE,(global)\r
+ 000064CC 19 4403 ADD HL,DE\r
+ 000064CD 5E 4404 LD E,(HL)\r
+ 000064CE 23 4405 INC HL\r
+ 000064CF 56 4406 LD D,(HL)\r
+ 000064D0 E1 4407 POP HL\r
+ 000064D1 19 4408 ADD HL,DE\r
+ 000064D2 2B 4409 DEC HL\r
+ 000064D3 2B 4410 DEC HL\r
+ 000064D4 5E 4411 LD E,(HL)\r
+ 000064D5 23 4412 INC HL\r
+ 000064D6 56 4413 LD D,(HL)\r
+ 000064D7 D5 4414 PUSH DE\r
+ 000064D8 21 10 00 4415 LD HL,16\r
+ 000064DB E5 4416 PUSH HL\r
+ 000064DC 2E 06 4417 LD L,6\r
+ 000064DE DD 5E EC 4418 LD E,(IX-20)\r
+ 000064E1 DD 56 ED 4419 LD D,(IX-19)\r
+ 000064E4 19 4420 ADD HL,DE\r
+ 000064E5 6E 4421 LD L,(HL)\r
+ 000064E6 26 00 4422 LD H,0\r
+ 000064E8 01 F0 FF 4423 LD BC,65520\r
+ 000064EB 09 4424 ADD HL,BC\r
+ 000064EC E5 4425 PUSH HL\r
+ 000064ED DD 6E FE 4426 LD L,(IX-2)\r
+ 000064F0 DD 66 FF 4427 LD H,(IX-1)\r
+ 000064F3 29 4428 ADD HL,HL\r
+ 000064F4 29 4429 ADD HL,HL\r
+ 000064F5 4D 4430 LD C,L\r
+ 000064F6 44 4431 LD B,H\r
+ 000064F7 29 4432 ADD HL,HL\r
+ 000064F8 09 4433 ADD HL,BC\r
+ 000064F9 01 14 00 4434 LD BC,20\r
+ 000064FC 09 4435 ADD HL,BC\r
+ 000064FD 4D 4436 LD C,L\r
+ 000064FE 44 4437 LD B,H\r
+ 000064FF 11 08 00 4438 LD DE,8\r
+ 00006502 3E 00 4439 LD A,BYTE3 Label_new\r
+ 00006504 21 60 5E 4440 LD HL,LWRD Label_new\r
+ 00006507 CD 5E 81 4441 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000650A F1 4442 POP AF\r
+ 0000650B F1 4443 POP AF\r
+ 0000650C F1 4444 POP AF\r
+ 0000650D DD 75 FC 4445 LD (IX-4),L\r
+ 00006510 DD 74 FD 4446 LD (IX-3),H\r
+ 00006513 01 0E 00 4447 LD BC,14\r
+ 00006516 09 4448 ADD HL,BC\r
+ 00006517 36 30 4449 LD (HL),48\r
+ 00006519 23 4450 INC HL\r
+ 0000651A 70 4451 LD (HL),B\r
+ 0000651B DD 4E FC 4452 LD C,(IX-4)\r
+ 0000651E DD 46 FD 4453 LD B,(IX-3)\r
+ 00006521 C5 4454 PUSH BC\r
+ 00006522 DD 5E EC 4455 LD E,(IX-20)\r
+ 00006525 4B 4456 LD C,E\r
+ 00006526 DD 56 ED 4457 LD D,(IX-19)\r
+ 00006529 42 4458 LD B,D\r
+ 0000652A 21 1D 00 4459 LD HL,29\r
+ 0000652D 09 4460 ADD HL,BC\r
+ 0000652E 4E 4461 LD C,(HL)\r
+ 0000652F 23 4462 INC HL\r
+ 00006530 46 4463 LD B,(HL)\r
+ 00006531 23 4464 INC HL\r
+ 00006532 7E 4465 LD A,(HL)\r
+ 00006533 69 4466 LD L,C\r
+ 00006534 60 4467 LD H,B\r
+ 00006535 C1 4468 POP BC\r
+ 00006536 CD 5E 81 4469 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006539 DD 34 FE 4470 INC (IX-2)\r
+ 0000653C 20 03 4471 JR NZ,?0369\r
+ 0000653E DD 34 FF 4472 INC (IX-1)\r
+ 00006541 4473 ?0369:\r
+ 00006541 C3 82 64 4474 JP LWRD ?0296\r
+ 00006544 4475 ?0295:\r
+ 00006544 01 CA 84 4476 LD BC,?0299\r
+ 00006547 DD 5E EC 4477 LD E,(IX-20)\r
+ 0000654A DD 56 ED 4478 LD D,(IX-19)\r
+ 0000654D 3E 00 4479 LD A,BYTE3 Component_setlabel\r
+ 0000654F 21 22 4C 4480 LD HL,LWRD Component_setlabel\r
+ 00006552 CD 5E 81 4481 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006555 01 FF 00 4482 LD BC,255\r
+ 00006558 CD D1 65 4483 CALL LWRD ?0476\r
+ 0000655B 01 0E 00 4484 LD BC,14\r
+ 0000655E 09 4485 ADD HL,BC\r
+ 0000655F 36 30 4486 LD (HL),48\r
+ 00006561 23 4487 INC HL\r
+ 00006562 70 4488 LD (HL),B\r
+ 00006563 0E FE 4489 LD C,254\r
+ 00006565 CD D1 65 4490 CALL LWRD ?0476\r
+ 00006568 EB 4491 EX DE,HL\r
+ 00006569 CD 58 4F 4492 CALL LWRD ?0453\r
+ 0000656C DD 4E EC 4493 LD C,(IX-20)\r
+ 0000656F DD 46 ED 4494 LD B,(IX-19)\r
+ 00006572 C5 4495 PUSH BC\r
+ 00006573 FD 5E 11 4496 LD E,(IY+17)\r
+ 00006576 FD 56 12 4497 LD D,(IY+18)\r
+ 00006579 FD 6E 11 4498 LD L,(IY+17)\r
+ 0000657C FD 66 12 4499 LD H,(IY+18)\r
+ 0000657F 01 1D 00 4500 LD BC,29\r
+ 00006582 09 4501 ADD HL,BC\r
+ 00006583 4E 4502 LD C,(HL)\r
+ 00006584 23 4503 INC HL\r
+ 00006585 46 4504 LD B,(HL)\r
+ 00006586 23 4505 INC HL\r
+ 00006587 7E 4506 LD A,(HL)\r
+ 00006588 69 4507 LD L,C\r
+ 00006589 60 4508 LD H,B\r
+ 0000658A C1 4509 POP BC\r
+ 0000658B CD 5E 81 4510 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000658E 21 00 00 4511 LD HL,0\r
+ 00006591 E5 4512 PUSH HL\r
+ 00006592 FD 5E 11 4513 LD E,(IY+17)\r
+ 00006595 FD 56 12 4514 LD D,(IY+18)\r
+ 00006598 FD 6E 11 4515 LD L,(IY+17)\r
+ 0000659B FD 66 12 4516 LD H,(IY+18)\r
+ 0000659E 01 17 00 4517 LD BC,23\r
+ 000065A1 09 4518 ADD HL,BC\r
+ 000065A2 4E 4519 LD C,(HL)\r
+ 000065A3 23 4520 INC HL\r
+ 000065A4 46 4521 LD B,(HL)\r
+ 000065A5 23 4522 INC HL\r
+ 000065A6 7E 4523 LD A,(HL)\r
+ 000065A7 69 4524 LD L,C\r
+ 000065A8 60 4525 LD H,B\r
+ 000065A9 01 03 01 4526 LD BC,259\r
+ 000065AC CD 5E 81 4527 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000065AF E1 4528 POP HL\r
+ 000065B0 4529 ?0294:\r
+ 000065B0 21 10 00 4530 LD HL,16\r
+ 000065B3 ED 4B C0 86 4531 LD BC,(global)\r
+ 000065B7 09 4532 ADD HL,BC\r
+ 000065B8 7E 4533 LD A,(HL)\r
+ 000065B9 23 4534 INC HL\r
+ 000065BA B6 4535 OR (HL)\r
+ 000065BB 23 4536 INC HL\r
+ 000065BC B6 4537 OR (HL)\r
+ 000065BD 28 0D 4538 JR Z,?0301\r
+ 000065BF 4539 ?0300:\r
+ 000065BF FD E5 4540 PUSH IY\r
+ 000065C1 D1 4541 POP DE\r
+ 000065C2 21 10 00 4542 LD HL,16\r
+ 000065C5 ED 4B C0 86 4543 LD BC,(global)\r
+ 000065C9 CD 5D 53 4544 CALL LWRD ?0475\r
+ 000065CC 4545 ?0301:\r
+ 000065CC FD E1 4546 POP IY\r
+ 000065CE C3 1F 81 4547 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000065D1 4548 ?0476:\r
+ 000065D1 DD 5E EC 4549 LD E,(IX-20)\r
+ 000065D4 DD 56 ED 4550 LD D,(IX-19)\r
+ 000065D7 3E 00 4551 LD A,BYTE3 Component_find\r
+ 000065D9 21 57 4D 4552 LD HL,LWRD Component_find\r
+ 000065DC C3 5E 81 4553 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 000065DF 4554 read_stringtable:\r
+ 000065DF CD 88 81 4555 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 000065E2 F8 FF 4556 DEFW -8\r
+ 000065E4 FD E5 4557 PUSH IY\r
+ 000065E6 03 4558 INC BC\r
+ 000065E7 0A 4559 LD A,(BC)\r
+ 000065E8 DD 77 FE 4560 LD (IX-2),A\r
+ 000065EB 03 4561 INC BC\r
+ 000065EC 0A 4562 LD A,(BC)\r
+ 000065ED DD 77 FF 4563 LD (IX-1),A\r
+ 000065F0 03 4564 INC BC\r
+ 000065F1 69 4565 LD L,C\r
+ 000065F2 60 4566 LD H,B\r
+ 000065F3 4E 4567 LD C,(HL)\r
+ 000065F4 DD 71 FC 4568 LD (IX-4),C\r
+ 000065F7 23 4569 INC HL\r
+ 000065F8 46 4570 LD B,(HL)\r
+ 000065F9 DD 70 FD 4571 LD (IX-3),B\r
+ 000065FC DD 6E FE 4572 LD L,(IX-2)\r
+ 000065FF 67 4573 LD H,A\r
+ 00006600 29 4574 ADD HL,HL\r
+ 00006601 EB 4575 EX DE,HL\r
+ 00006602 CD 8F 62 4576 CALL LWRD ?0454\r
+ 00006605 DD 75 FA 4577 LD (IX-6),L\r
+ 00006608 DD 74 FB 4578 LD (IX-5),H\r
+ 0000660B 59 4579 LD E,C\r
+ 0000660C 50 4580 LD D,B\r
+ 0000660D CD 97 4A 4581 CALL LWRD ?0447\r
+ 00006610 C5 4582 PUSH BC\r
+ 00006611 4D 4583 LD C,L\r
+ 00006612 44 4584 LD B,H\r
+ 00006613 DD 5E 02 4585 LD E,(IX+2)\r
+ 00006616 DD 56 03 4586 LD D,(IX+3)\r
+ 00006619 CD 87 62 4587 CALL LWRD ?0441\r
+ 0000661C F1 4588 POP AF\r
+ 0000661D 11 00 00 4589 LD DE,0\r
+ 00006620 AF 4590 XOR A\r
+ 00006621 DD 77 F8 4591 LD (IX-8),A\r
+ 00006624 DD 77 F9 4592 LD (IX-7),A\r
+ 00006627 4593 ?0303:\r
+ 00006627 DD 4E FC 4594 LD C,(IX-4)\r
+ 0000662A DD 46 FD 4595 LD B,(IX-3)\r
+ 0000662D 6B 4596 LD L,E\r
+ 0000662E 62 4597 LD H,D\r
+ 0000662F CD A6 81 4598 CALL LWRD ?SS_CMP_L02\r
+ 00006632 30 35 4599 JR NC,?0302\r
+ 00006634 CD A5 66 4600 CALL LWRD ?0479\r
+ 00006637 30 30 4601 JR NC,?0302\r
+ 00006639 4602 ?0306:\r
+ 00006639 4603 ?0305:\r
+ 00006639 4604 ?0304:\r
+ 00006639 23 4605 INC HL\r
+ 0000663A DD 75 F8 4606 LD (IX-8),L\r
+ 0000663D DD 74 F9 4607 LD (IX-7),H\r
+ 00006640 2B 4608 DEC HL\r
+ 00006641 29 4609 ADD HL,HL\r
+ 00006642 DD 4E FA 4610 LD C,(IX-6)\r
+ 00006645 DD 46 FB 4611 LD B,(IX-5)\r
+ 00006648 09 4612 ADD HL,BC\r
+ 00006649 E5 4613 PUSH HL\r
+ 0000664A FD E5 4614 PUSH IY\r
+ 0000664C E1 4615 POP HL\r
+ 0000664D 19 4616 ADD HL,DE\r
+ 0000664E 4D 4617 LD C,L\r
+ 0000664F 44 4618 LD B,H\r
+ 00006650 E1 4619 POP HL\r
+ 00006651 71 4620 LD (HL),C\r
+ 00006652 23 4621 INC HL\r
+ 00006653 70 4622 LD (HL),B\r
+ 00006654 4623 ?0308:\r
+ 00006654 FD E5 4624 PUSH IY\r
+ 00006656 E1 4625 POP HL\r
+ 00006657 19 4626 ADD HL,DE\r
+ 00006658 7E 4627 LD A,(HL)\r
+ 00006659 B7 4628 OR A\r
+ 0000665A 28 03 4629 JR Z,?0307\r
+ 0000665C 4630 ?0309:\r
+ 0000665C 13 4631 INC DE\r
+ 0000665D 18 F5 4632 JR ?0308\r
+ 0000665F 4633 ?0307:\r
+ 0000665F 6B 4634 LD L,E\r
+ 00006660 62 4635 LD H,D\r
+ 00006661 13 4636 INC DE\r
+ 00006662 FD E5 4637 PUSH IY\r
+ 00006664 C1 4638 POP BC\r
+ 00006665 09 4639 ADD HL,BC\r
+ 00006666 77 4640 LD (HL),A\r
+ 00006667 18 BE 4641 JR ?0303\r
+ 00006669 4642 ?0302:\r
+ 00006669 CD A5 66 4643 CALL LWRD ?0479\r
+ 0000666C 30 13 4644 JR NC,?0311\r
+ 0000666E 4645 ?0310:\r
+ 0000666E 29 4646 ADD HL,HL\r
+ 0000666F DD 4E FA 4647 LD C,(IX-6)\r
+ 00006672 DD 46 FB 4648 LD B,(IX-5)\r
+ 00006675 09 4649 ADD HL,BC\r
+ 00006676 E5 4650 PUSH HL\r
+ 00006677 FD E5 4651 PUSH IY\r
+ 00006679 E1 4652 POP HL\r
+ 0000667A 19 4653 ADD HL,DE\r
+ 0000667B 4D 4654 LD C,L\r
+ 0000667C 44 4655 LD B,H\r
+ 0000667D E1 4656 POP HL\r
+ 0000667E 71 4657 LD (HL),C\r
+ 0000667F 23 4658 INC HL\r
+ 00006680 70 4659 LD (HL),B\r
+ 00006681 4660 ?0311:\r
+ 00006681 21 06 00 4661 LD HL,6\r
+ 00006684 ED 4B C0 86 4662 LD BC,(global)\r
+ 00006688 09 4663 ADD HL,BC\r
+ 00006689 FD E5 4664 PUSH IY\r
+ 0000668B C1 4665 POP BC\r
+ 0000668C 71 4666 LD (HL),C\r
+ 0000668D 23 4667 INC HL\r
+ 0000668E 70 4668 LD (HL),B\r
+ 0000668F 21 08 00 4669 LD HL,8\r
+ 00006692 ED 4B C0 86 4670 LD BC,(global)\r
+ 00006696 09 4671 ADD HL,BC\r
+ 00006697 DD 4E FA 4672 LD C,(IX-6)\r
+ 0000669A 71 4673 LD (HL),C\r
+ 0000669B DD 46 FB 4674 LD B,(IX-5)\r
+ 0000669E 23 4675 INC HL\r
+ 0000669F 70 4676 LD (HL),B\r
+ 000066A0 FD E1 4677 POP IY\r
+ 000066A2 C3 1F 81 4678 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
+ 000066A5 4679 ?0479:\r
+ 000066A5 DD 4E FE 4680 LD C,(IX-2)\r
+ 000066A8 DD 46 FF 4681 LD B,(IX-1)\r
+ 000066AB DD 6E F8 4682 LD L,(IX-8)\r
+ 000066AE DD 66 F9 4683 LD H,(IX-7)\r
+ 000066B1 C3 A6 81 4684 JP LWRD ?SS_CMP_L02\r
+ 000066B4 4685 gui_globals:\r
+ 000066B4 2A C0 86 4686 LD HL,(global)\r
+ 000066B7 C3 25 81 4687 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 000066BA 4688 GUIinit:\r
+ 000066BA C5 4689 PUSH BC\r
+ 000066BB D5 4690 PUSH DE\r
+ 000066BC 11 13 00 4691 LD DE,19\r
+ 000066BF CD 8F 62 4692 CALL LWRD ?0454\r
+ 000066C2 22 C0 86 4693 LD (global),HL\r
+ 000066C5 AF 4694 XOR A\r
+ 000066C6 77 4695 LD (HL),A\r
+ 000066C7 23 4696 INC HL\r
+ 000066C8 77 4697 LD (HL),A\r
+ 000066C9 21 04 00 4698 LD HL,4\r
+ 000066CC ED 4B C0 86 4699 LD BC,(global)\r
+ 000066D0 09 4700 ADD HL,BC\r
+ 000066D1 77 4701 LD (HL),A\r
+ 000066D2 23 4702 INC HL\r
+ 000066D3 77 4703 LD (HL),A\r
+ 000066D4 21 0A 00 4704 LD HL,10\r
+ 000066D7 ED 4B C0 86 4705 LD BC,(global)\r
+ 000066DB 09 4706 ADD HL,BC\r
+ 000066DC 77 4707 LD (HL),A\r
+ 000066DD 23 4708 INC HL\r
+ 000066DE 77 4709 LD (HL),A\r
+ 000066DF 21 0C 00 4710 LD HL,12\r
+ 000066E2 ED 4B C0 86 4711 LD BC,(global)\r
+ 000066E6 09 4712 ADD HL,BC\r
+ 000066E7 77 4713 LD (HL),A\r
+ 000066E8 23 4714 INC HL\r
+ 000066E9 77 4715 LD (HL),A\r
+ 000066EA 21 08 00 4716 LD HL,8\r
+ 000066ED ED 4B C0 86 4717 LD BC,(global)\r
+ 000066F1 09 4718 ADD HL,BC\r
+ 000066F2 77 4719 LD (HL),A\r
+ 000066F3 23 4720 INC HL\r
+ 000066F4 77 4721 LD (HL),A\r
+ 000066F5 21 06 00 4722 LD HL,6\r
+ 000066F8 ED 4B C0 86 4723 LD BC,(global)\r
+ 000066FC 09 4724 ADD HL,BC\r
+ 000066FD 77 4725 LD (HL),A\r
+ 000066FE 23 4726 INC HL\r
+ 000066FF 77 4727 LD (HL),A\r
+ 00006700 21 10 00 4728 LD HL,16\r
+ 00006703 ED 4B C0 86 4729 LD BC,(global)\r
+ 00006707 09 4730 ADD HL,BC\r
+ 00006708 77 4731 LD (HL),A\r
+ 00006709 23 4732 INC HL\r
+ 0000670A 77 4733 LD (HL),A\r
+ 0000670B 23 4734 INC HL\r
+ 0000670C 77 4735 LD (HL),A\r
+ 0000670D 3E 00 4736 LD A,BYTE3 GraphicsOpen\r
+ 0000670F 21 C9 45 4737 LD HL,LWRD GraphicsOpen\r
+ 00006712 CD 5E 81 4738 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006715 21 00 00 4739 LD HL,0\r
+ 00006718 E5 4740 PUSH HL\r
+ 00006719 E5 4741 PUSH HL\r
+ 0000671A 0E 00 4742 LD C,BYTE3 stringheight01\r
+ 0000671C C5 4743 PUSH BC\r
+ 0000671D 21 39 4B 4744 LD HL,LWRD stringheight01\r
+ 00006720 E5 4745 PUSH HL\r
+ 00006721 0E 00 4746 LD C,BYTE3 stringwidth0\r
+ 00006723 C5 4747 PUSH BC\r
+ 00006724 21 55 4B 4748 LD HL,LWRD stringwidth0\r
+ 00006727 E5 4749 PUSH HL\r
+ 00006728 11 30 00 4750 LD DE,48\r
+ 0000672B CD D9 67 4751 CALL LWRD ?0484\r
+ 0000672E 21 0C 00 4752 LD HL,12\r
+ 00006731 39 4753 ADD HL,SP\r
+ 00006732 F9 4754 LD SP,HL\r
+ 00006733 21 00 00 4755 LD HL,0\r
+ 00006736 E5 4756 PUSH HL\r
+ 00006737 E5 4757 PUSH HL\r
+ 00006738 0E 00 4758 LD C,BYTE3 stringheight01\r
+ 0000673A C5 4759 PUSH BC\r
+ 0000673B 21 39 4B 4760 LD HL,LWRD stringheight01\r
+ 0000673E E5 4761 PUSH HL\r
+ 0000673F 0E 00 4762 LD C,BYTE3 stringwidth1\r
+ 00006741 C5 4763 PUSH BC\r
+ 00006742 21 66 4B 4764 LD HL,LWRD stringwidth1\r
+ 00006745 E5 4765 PUSH HL\r
+ 00006746 11 31 00 4766 LD DE,49\r
+ 00006749 CD D9 67 4767 CALL LWRD ?0484\r
+ 0000674C 21 0C 00 4768 LD HL,12\r
+ 0000674F 39 4769 ADD HL,SP\r
+ 00006750 F9 4770 LD SP,HL\r
+ 00006751 21 00 00 4771 LD HL,0\r
+ 00006754 E5 4772 PUSH HL\r
+ 00006755 E5 4773 PUSH HL\r
+ 00006756 0E 00 4774 LD C,BYTE3 stringheight2\r
+ 00006758 C5 4775 PUSH BC\r
+ 00006759 21 4C 4B 4776 LD HL,LWRD stringheight2\r
+ 0000675C E5 4777 PUSH HL\r
+ 0000675D 0E 00 4778 LD C,BYTE3 stringwidth2\r
+ 0000675F C5 4779 PUSH BC\r
+ 00006760 21 6F 4B 4780 LD HL,LWRD stringwidth2\r
+ 00006763 E5 4781 PUSH HL\r
+ 00006764 11 32 00 4782 LD DE,50\r
+ 00006767 CD D9 67 4783 CALL LWRD ?0484\r
+ 0000676A 21 0C 00 4784 LD HL,12\r
+ 0000676D 39 4785 ADD HL,SP\r
+ 0000676E F9 4786 LD SP,HL\r
+ 0000676F 21 0E 00 4787 LD HL,14\r
+ 00006772 ED 4B C0 86 4788 LD BC,(global)\r
+ 00006776 09 4789 ADD HL,BC\r
+ 00006777 E5 4790 PUSH HL\r
+ 00006778 11 80 00 4791 LD DE,128\r
+ 0000677B D5 4792 PUSH DE\r
+ 0000677C 5A 4793 LD E,D\r
+ 0000677D D5 4794 PUSH DE\r
+ 0000677E 4B 4795 LD C,E\r
+ 0000677F 42 4796 LD B,D\r
+ 00006780 3E 00 4797 LD A,BYTE3 Window_new\r
+ 00006782 21 3A 55 4798 LD HL,LWRD Window_new\r
+ 00006785 CD 5E 81 4799 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006788 F1 4800 POP AF\r
+ 00006789 F1 4801 POP AF\r
+ 0000678A 4D 4802 LD C,L\r
+ 0000678B 44 4803 LD B,H\r
+ 0000678C E1 4804 POP HL\r
+ 0000678D 71 4805 LD (HL),C\r
+ 0000678E 23 4806 INC HL\r
+ 0000678F 70 4807 LD (HL),B\r
+ 00006790 21 0E 00 4808 LD HL,14\r
+ 00006793 ED 4B C0 86 4809 LD BC,(global)\r
+ 00006797 09 4810 ADD HL,BC\r
+ 00006798 56 4811 LD D,(HL)\r
+ 00006799 23 4812 INC HL\r
+ 0000679A 66 4813 LD H,(HL)\r
+ 0000679B 6A 4814 LD L,D\r
+ 0000679C 11 0A 00 4815 LD DE,10\r
+ 0000679F 19 4816 ADD HL,DE\r
+ 000067A0 36 01 4817 LD (HL),1\r
+ 000067A2 23 4818 INC HL\r
+ 000067A3 72 4819 LD (HL),D\r
+ 000067A4 21 0E 00 4820 LD HL,14\r
+ 000067A7 ED 4B C0 86 4821 LD BC,(global)\r
+ 000067AB 09 4822 ADD HL,BC\r
+ 000067AC 56 4823 LD D,(HL)\r
+ 000067AD 23 4824 INC HL\r
+ 000067AE 66 4825 LD H,(HL)\r
+ 000067AF 6A 4826 LD L,D\r
+ 000067B0 11 17 00 4827 LD DE,23\r
+ 000067B3 19 4828 ADD HL,DE\r
+ 000067B4 36 B9 4829 LD (HL),LOW(rootWindow_handler)\r
+ 000067B6 23 4830 INC HL\r
+ 000067B7 36 5E 4831 LD (HL),HIGH(rootWindow_handler)\r
+ 000067B9 23 4832 INC HL\r
+ 000067BA 36 00 4833 LD (HL),BYTE3 rootWindow_handler\r
+ 000067BC 21 0E 00 4834 LD HL,14\r
+ 000067BF ED 4B C0 86 4835 LD BC,(global)\r
+ 000067C3 09 4836 ADD HL,BC\r
+ 000067C4 46 4837 LD B,(HL)\r
+ 000067C5 23 4838 INC HL\r
+ 000067C6 66 4839 LD H,(HL)\r
+ 000067C7 68 4840 LD L,B\r
+ 000067C8 01 1A 00 4841 LD BC,26\r
+ 000067CB 09 4842 ADD HL,BC\r
+ 000067CC 36 F5 4843 LD (HL),LOW(Root_paint)\r
+ 000067CE 23 4844 INC HL\r
+ 000067CF 36 54 4845 LD (HL),HIGH(Root_paint)\r
+ 000067D1 23 4846 INC HL\r
+ 000067D2 36 00 4847 LD (HL),BYTE3 Root_paint\r
+ 000067D4 D1 4848 POP DE\r
+ 000067D5 C1 4849 POP BC\r
+ 000067D6 C3 25 81 4850 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 000067D9 4851 ?0484:\r
+ 000067D9 3E 00 4852 LD A,BYTE3 loadFont\r
+ 000067DB 21 FC 49 4853 LD HL,LWRD loadFont\r
+ 000067DE C3 5E 81 4854 JP LWRD ?BANK_CALL_DIRECT_L08\r
+ 000067E1 4855 GUIunit:\r
+ 000067E1 C5 4856 PUSH BC\r
+ 000067E2 D5 4857 PUSH DE\r
+ 000067E3 21 0E 00 4858 LD HL,14\r
+ 000067E6 ED 4B C0 86 4859 LD BC,(global)\r
+ 000067EA 09 4860 ADD HL,BC\r
+ 000067EB 5E 4861 LD E,(HL)\r
+ 000067EC 23 4862 INC HL\r
+ 000067ED 56 4863 LD D,(HL)\r
+ 000067EE CD 58 4F 4864 CALL LWRD ?0453\r
+ 000067F1 3E 00 4865 LD A,BYTE3 ClearScreen\r
+ 000067F3 21 86 48 4866 LD HL,LWRD ClearScreen\r
+ 000067F6 CD 5E 81 4867 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000067F9 3E 00 4868 LD A,BYTE3 GraphicsClose\r
+ 000067FB 21 57 46 4869 LD HL,LWRD GraphicsClose\r
+ 000067FE CD 5E 81 4870 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006801 D1 4871 POP DE\r
+ 00006802 C1 4872 POP BC\r
+ 00006803 C3 25 81 4873 JP LWRD ?BANK_FAST_LEAVE_L08\r
+ 00006806 4874 GUIgo:\r
+ 00006806 CD 88 81 4875 CALL LWRD ?ENT_AUTO_DIRECT_L09\r
+ 00006809 FE FF 4876 DEFW 65534\r
+ 0000680B DD 4E 02 4877 LD C,(IX+2)\r
+ 0000680E DD 46 03 4878 LD B,(IX+3)\r
+ 00006811 21 0E 00 4879 LD HL,14\r
+ 00006814 ED 5B C0 86 4880 LD DE,(global)\r
+ 00006818 19 4881 ADD HL,DE\r
+ 00006819 5E 4882 LD E,(HL)\r
+ 0000681A 23 4883 INC HL\r
+ 0000681B 56 4884 LD D,(HL)\r
+ 0000681C 3E 00 4885 LD A,BYTE3 screenbuilder\r
+ 0000681E 21 D7 5E 4886 LD HL,LWRD screenbuilder\r
+ 00006821 CD 5E 81 4887 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 00006824 4888 ?0313:\r
+ 00006824 21 04 00 4889 LD HL,4\r
+ 00006827 ED 4B C0 86 4890 LD BC,(global)\r
+ 0000682B 09 4891 ADD HL,BC\r
+ 0000682C 7E 4892 LD A,(HL)\r
+ 0000682D 23 4893 INC HL\r
+ 0000682E B6 4894 OR (HL)\r
+ 0000682F C2 C4 68 4895 JP NZ,?0312\r
+ 00006832 4896 ?0314:\r
+ 00006832 21 01 00 4897 LD HL,1\r
+ 00006835 E5 4898 PUSH HL\r
+ 00006836 23 4899 INC HL\r
+ 00006837 39 4900 ADD HL,SP\r
+ 00006838 4D 4901 LD C,L\r
+ 00006839 44 4902 LD B,H\r
+ 0000683A 2A C0 86 4903 LD HL,(global)\r
+ 0000683D 23 4904 INC HL\r
+ 0000683E 23 4905 INC HL\r
+ 0000683F 5E 4906 LD E,(HL)\r
+ 00006840 23 4907 INC HL\r
+ 00006841 56 4908 LD D,(HL)\r
+ 00006842 CD 87 62 4909 CALL LWRD ?0441\r
+ 00006845 F1 4910 POP AF\r
+ 00006846 3E 01 4911 LD A,1\r
+ 00006848 AD 4912 XOR L\r
+ 00006849 B4 4913 OR H\r
+ 0000684A 20 D8 4914 JR NZ,?0313\r
+ 0000684C 4915 ?0315:\r
+ 0000684C DD 4E FE 4916 LD C,(IX-2)\r
+ 0000684F 47 4917 LD B,A\r
+ 00006850 C5 4918 PUSH BC\r
+ 00006851 21 D6 84 4919 LD HL,?0317\r
+ 00006854 E5 4920 PUSH HL\r
+ 00006855 3E 00 4921 LD A,BYTE3 printf\r
+ 00006857 21 0A 6E 4922 LD HL,LWRD printf\r
+ 0000685A CD 5E 81 4923 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 0000685D F1 4924 POP AF\r
+ 0000685E F1 4925 POP AF\r
+ 0000685F AF 4926 XOR A\r
+ 00006860 DD B6 FE 4927 OR (IX-2)\r
+ 00006863 28 29 4928 JR Z,?0319\r
+ 00006865 4929 ?0318:\r
+ 00006865 4F 4930 LD C,A\r
+ 00006866 C5 4931 PUSH BC\r
+ 00006867 21 0E 00 4932 LD HL,14\r
+ 0000686A ED 5B C0 86 4933 LD DE,(global)\r
+ 0000686E 19 4934 ADD HL,DE\r
+ 0000686F 5E 4935 LD E,(HL)\r
+ 00006870 23 4936 INC HL\r
+ 00006871 56 4937 LD D,(HL)\r
+ 00006872 21 0E 00 4938 LD HL,14\r
+ 00006875 ED 4B C0 86 4939 LD BC,(global)\r
+ 00006879 09 4940 ADD HL,BC\r
+ 0000687A 46 4941 LD B,(HL)\r
+ 0000687B 23 4942 INC HL\r
+ 0000687C 66 4943 LD H,(HL)\r
+ 0000687D 68 4944 LD L,B\r
+ 0000687E 01 17 00 4945 LD BC,23\r
+ 00006881 09 4946 ADD HL,BC\r
+ 00006882 4E 4947 LD C,(HL)\r
+ 00006883 23 4948 INC HL\r
+ 00006884 46 4949 LD B,(HL)\r
+ 00006885 23 4950 INC HL\r
+ 00006886 7E 4951 LD A,(HL)\r
+ 00006887 69 4952 LD L,C\r
+ 00006888 60 4953 LD H,B\r
+ 00006889 01 01 00 4954 LD BC,1\r
+ 0000688C 18 29 4955 JR ?0370\r
+ 0000688E 4956 ?0319:\r
+ 0000688E DD 4E FF 4957 LD C,(IX-1)\r
+ 00006891 C5 4958 PUSH BC\r
+ 00006892 21 0E 00 4959 LD HL,14\r
+ 00006895 ED 5B C0 86 4960 LD DE,(global)\r
+ 00006899 19 4961 ADD HL,DE\r
+ 0000689A 5E 4962 LD E,(HL)\r
+ 0000689B 23 4963 INC HL\r
+ 0000689C 56 4964 LD D,(HL)\r
+ 0000689D 21 0E 00 4965 LD HL,14\r
+ 000068A0 ED 4B C0 86 4966 LD BC,(global)\r
+ 000068A4 09 4967 ADD HL,BC\r
+ 000068A5 46 4968 LD B,(HL)\r
+ 000068A6 23 4969 INC HL\r
+ 000068A7 66 4970 LD H,(HL)\r
+ 000068A8 68 4971 LD L,B\r
+ 000068A9 01 17 00 4972 LD BC,23\r
+ 000068AC 09 4973 ADD HL,BC\r
+ 000068AD 4E 4974 LD C,(HL)\r
+ 000068AE 23 4975 INC HL\r
+ 000068AF 46 4976 LD B,(HL)\r
+ 000068B0 23 4977 INC HL\r
+ 000068B1 7E 4978 LD A,(HL)\r
+ 000068B2 69 4979 LD L,C\r
+ 000068B3 60 4980 LD H,B\r
+ 000068B4 01 02 00 4981 LD BC,2\r
+ 000068B7 4982 ?0370:\r
+ 000068B7 CD 5E 81 4983 CALL LWRD ?BANK_CALL_DIRECT_L08\r
+ 000068BA E1 4984 POP HL\r
+ 000068BB 4985 ?0320:\r
+ 000068BB DD 46 FE 4986 LD B,(IX-2)\r
+ 000068BE DD 70 FF 4987 LD (IX-1),B\r
+ 000068C1 4988 ?0316:\r
+ 000068C1 C3 24 68 4989 JP LWRD ?0313\r
+ 000068C4 4990 ?0312:\r
+ 000068C4 C3 1F 81 4991 JP LWRD ?BANK_LEAVE_DIRECT_L08\r
4992 RSEG CSTR\r
- 000084E3 4993 ?0001:\r
- 000084E3 2F 64 65 76 2F 6C 63 4994 DEFB '/dev/lcd0'\r
+ 000084B5 4993 ?0001:\r
+ 000084B5 2F 64 65 76 2F 6C 63 4994 DEFB '/dev/lcd0'\r
64 30\r
- 000084EC 00 4995 DEFB 0\r
- 000084ED 4996 ?0221:\r
- 000084ED 4F 4B 4997 DEFB 'OK'\r
- 000084EF 00 4998 DEFB 0\r
- 000084F0 4999 ?0222:\r
- 000084F0 43 61 6E 63 65 6C 5000 DEFB 'Cancel'\r
- 000084F6 00 5001 DEFB 0\r
- 000084F7 5002 ?0249:\r
- 000084F7 00 5003 DEFB 0\r
- 000084F8 5004 ?0299:\r
- 000084F8 4D 65 73 73 61 67 65 5005 DEFB 'Message Box'\r
+ 000084BE 00 4995 DEFB 0\r
+ 000084BF 4996 ?0221:\r
+ 000084BF 4F 4B 4997 DEFB 'OK'\r
+ 000084C1 00 4998 DEFB 0\r
+ 000084C2 4999 ?0222:\r
+ 000084C2 43 61 6E 63 65 6C 5000 DEFB 'Cancel'\r
+ 000084C8 00 5001 DEFB 0\r
+ 000084C9 5002 ?0249:\r
+ 000084C9 00 5003 DEFB 0\r
+ 000084CA 5004 ?0299:\r
+ 000084CA 4D 65 73 73 61 67 65 5005 DEFB 'Message Box'\r
20 42 6F 78\r
- 00008503 00 5006 DEFB 0\r
- 00008504 5007 ?0317:\r
- 00008504 30 78 25 30 32 78 5008 DEFB '0x%02x'\r
- 0000850A 0A 00 5009 DEFB 10,0\r
+ 000084D5 00 5006 DEFB 0\r
+ 000084D6 5007 ?0317:\r
+ 000084D6 30 78 25 30 32 78 5008 DEFB '0x%02x'\r
+ 000084DC 0A 00 5009 DEFB 10,0\r
5010 RSEG CONST\r
- 000084AF 5011 ?0000:\r
- 000084AF 1B 5012 DEFB 27\r
- 000084B0 4B 5013 DEFB 'K'\r
- 000084B1 5014 ?0002:\r
- 000084B1 1B 5015 DEFB 27\r
- 000084B2 53 5016 DEFB 'S'\r
- 000084B3 00 5017 DEFB 0\r
- 000084B4 00 5018 DEFB 0\r
- 000084B5 5019 ?0003:\r
- 000084B5 1B 5020 DEFB 27\r
- 000084B6 43 5021 DEFB 'C'\r
- 000084B7 00 5022 DEFB 0\r
- 000084B8 00 5023 DEFB 0\r
- 000084B9 5024 ?0004:\r
- 000084B9 1B 5025 DEFB 27\r
- 000084BA 4E 5026 DEFB 'N'\r
- 000084BB 00 5027 DEFB 0\r
- 000084BC 00 5028 DEFB 0\r
- 000084BD 5029 ?0005:\r
- 000084BD 1B 5030 DEFB 27\r
- 000084BE 52 5031 DEFB 'R'\r
- 000084BF 00 5032 DEFB 0\r
- 000084C0 00 5033 DEFB 0\r
- 000084C1 5034 ?0006:\r
- 000084C1 1B 5035 DEFB 27\r
- 000084C2 46 5036 DEFB 'F'\r
- 000084C3 00 5037 DEFB 0\r
- 000084C4 00 5038 DEFB 0\r
- 000084C5 5039 ?0007:\r
- 000084C5 1B 5040 DEFB 27\r
- 000084C6 68 5041 DEFB 'h'\r
- 000084C7 00 5042 DEFB 0\r
- 000084C8 00 5043 DEFB 0\r
- 000084C9 5044 ?0008:\r
- 000084C9 1B 5045 DEFB 27\r
- 000084CA 5A 5046 DEFB 'Z'\r
- 000084CB 00 5047 DEFB 0\r
- 000084CC 00 5048 DEFB 0\r
- 000084CD 00 5049 DEFB 0\r
- 000084CE 00 5050 DEFB 0\r
- 000084CF 00 5051 DEFB 0\r
- 000084D0 5052 ?0009:\r
- 000084D0 1B 5053 DEFB 27\r
- 000084D1 45 5054 DEFB 'E'\r
- 000084D2 00 5055 DEFB 0\r
- 000084D3 5056 ?0010:\r
- 000084D3 1B 5057 DEFB 27\r
- 000084D4 00 5058 DEFB 0\r
- 000084D5 5059 ?0286:\r
- 000084D5 2F 5060 DEFB '/'\r
- 000084D6 77 5061 DEFB 'w'\r
- 000084D7 6E 5062 DEFB 'n'\r
- 000084D8 64 5063 DEFB 'd'\r
- 000084D9 2F 5064 DEFB '/'\r
- 000084DA 30 5065 DEFB '0'\r
- 000084DB 30 5066 DEFB '0'\r
- 000084DC 30 5067 DEFB '0'\r
- 000084DD 30 5068 DEFB '0'\r
- 000084DE 2E 5069 DEFB '.'\r
- 000084DF 73 5070 DEFB 's'\r
- 000084E0 63 5071 DEFB 'c'\r
- 000084E1 72 5072 DEFB 'r'\r
- 000084E2 00 5073 DEFB 0\r
+ 00008481 5011 ?0000:\r
+ 00008481 1B 5012 DEFB 27\r
+ 00008482 4B 5013 DEFB 'K'\r
+ 00008483 5014 ?0002:\r
+ 00008483 1B 5015 DEFB 27\r
+ 00008484 53 5016 DEFB 'S'\r
+ 00008485 00 5017 DEFB 0\r
+ 00008486 00 5018 DEFB 0\r
+ 00008487 5019 ?0003:\r
+ 00008487 1B 5020 DEFB 27\r
+ 00008488 43 5021 DEFB 'C'\r
+ 00008489 00 5022 DEFB 0\r
+ 0000848A 00 5023 DEFB 0\r
+ 0000848B 5024 ?0004:\r
+ 0000848B 1B 5025 DEFB 27\r
+ 0000848C 4E 5026 DEFB 'N'\r
+ 0000848D 00 5027 DEFB 0\r
+ 0000848E 00 5028 DEFB 0\r
+ 0000848F 5029 ?0005:\r
+ 0000848F 1B 5030 DEFB 27\r
+ 00008490 52 5031 DEFB 'R'\r
+ 00008491 00 5032 DEFB 0\r
+ 00008492 00 5033 DEFB 0\r
+ 00008493 5034 ?0006:\r
+ 00008493 1B 5035 DEFB 27\r
+ 00008494 46 5036 DEFB 'F'\r
+ 00008495 00 5037 DEFB 0\r
+ 00008496 00 5038 DEFB 0\r
+ 00008497 5039 ?0007:\r
+ 00008497 1B 5040 DEFB 27\r
+ 00008498 68 5041 DEFB 'h'\r
+ 00008499 00 5042 DEFB 0\r
+ 0000849A 00 5043 DEFB 0\r
+ 0000849B 5044 ?0008:\r
+ 0000849B 1B 5045 DEFB 27\r
+ 0000849C 5A 5046 DEFB 'Z'\r
+ 0000849D 00 5047 DEFB 0\r
+ 0000849E 00 5048 DEFB 0\r
+ 0000849F 00 5049 DEFB 0\r
+ 000084A0 00 5050 DEFB 0\r
+ 000084A1 00 5051 DEFB 0\r
+ 000084A2 5052 ?0009:\r
+ 000084A2 1B 5053 DEFB 27\r
+ 000084A3 45 5054 DEFB 'E'\r
+ 000084A4 00 5055 DEFB 0\r
+ 000084A5 5056 ?0010:\r
+ 000084A5 1B 5057 DEFB 27\r
+ 000084A6 00 5058 DEFB 0\r
+ 000084A7 5059 ?0286:\r
+ 000084A7 2F 5060 DEFB '/'\r
+ 000084A8 77 5061 DEFB 'w'\r
+ 000084A9 6E 5062 DEFB 'n'\r
+ 000084AA 64 5063 DEFB 'd'\r
+ 000084AB 2F 5064 DEFB '/'\r
+ 000084AC 30 5065 DEFB '0'\r
+ 000084AD 30 5066 DEFB '0'\r
+ 000084AE 30 5067 DEFB '0'\r
+ 000084AF 30 5068 DEFB '0'\r
+ 000084B0 2E 5069 DEFB '.'\r
+ 000084B1 73 5070 DEFB 's'\r
+ 000084B2 63 5071 DEFB 'c'\r
+ 000084B3 72 5072 DEFB 'r'\r
+ 000084B4 00 5073 DEFB 0\r
5074 RSEG UDATA0\r
- 0000873F 5075 global:\r
- 0000873F 5076 DEFS 2\r
+ 000086C0 5075 global:\r
+ 000086C0 5076 DEFS 2\r
00000002 5077 END\r
\fASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1.\r
Hexadecimal [32-Bits]\r
\r
iccz80 -S -w -mb -v1 -z -A -I..\..\..\include\ -I..\cmx\ -I..\uzi\ -I..\libc\ -DDEBUG=2 ..\uzi\touchscreen\r
@if errorlevel 1 goto failure\r
-del testsystem.r01\r
+del touchscreen.r01\r
as-z80 -l -o touchscreen.s01\r
@if errorlevel 1 goto failure\r
\r
+rem link everything\r
+rem link everything\r
rem link everything\r
\r
-link-z80 -f kernel\r
+link-z80 -i -f kernel\r
@if errorlevel 1 goto failure\r
ihex2bin -l kernel.i86 ..\..\..\bin\kernel.bin\r
@if errorlevel 1 goto failure\r
as-z80 -l -o testsystem.s01\r
@if errorlevel 1 goto failure\r
\r
+iccz80 -S -w -mb -v1 -z -A -I..\..\..\include\ -I..\cmx\ -I..\uzi\ -I..\libc\ -DDEBUG=2 ..\uzi\touchscreen\r
+@if errorlevel 1 goto failure\r
+del touchscreen.r01\r
+as-z80 -l -o touchscreen.s01\r
+@if errorlevel 1 goto failure\r
+\r
+iccz80 -S -w -mb -v1 -z -A -I..\..\..\include\ -I..\cmx\ -I..\uzi\ -I..\libc\ -DDEBUG=2 -DVAX ..\uzi\xfs\r
+@if errorlevel 1 goto failure\r
+del xfs.r01\r
+as-z80 -l -o xfs.s01\r
+@if errorlevel 1 goto failure\r
+\r
+iccz80 -S -w -mb -v1 -z -A -I..\..\..\include\ -I..\cmx\ -I..\uzi\ -I..\libc\ -DVAX -DUTIL -DDEBUG=1 -c ..\uzi\utils.c\r
+@if errorlevel 1 goto failure\r
+del utils.r01\r
+as-z80 -l -o utils.s01\r
+@if errorlevel 1 goto failure\r
+\r
+rem link everything\r
+rem link everything\r
rem link everything\r
\r
-link-z80 -f kernel\r
+link-z80 -i -f kernel\r
@if errorlevel 1 goto failure\r
ihex2bin -l kernel.i86 ..\..\..\bin\kernel.bin\r
@if errorlevel 1 goto failure\r
\r
ld d,12\r
out (c),d ; address WR12\r
- ld a,6 ; 6=57600 4=76800 2=115200\r
+ ld a,6 ; 10=38400 6=57600 4=76800 2=115200 (RPB: added divisor 10)\r
out (c),a ; divisor 0002h indicates 115200 bps\r
inc d ; ld d,13\r
out (c),d ; address WR13\r
\r
ld d,12\r
out (c),d ; address WR12\r
- ld a,6 ; 6=57600 4=76800 2=115200\r
+ ld a,10 ; 10=38400 6=57600 4=76800 2=115200 (RPB: added divisor 10)\r
+ ; RPB: set speed to 38400 on escc2\r
out (c),a ; divisor 0002h indicates 115200 bps\r
inc d ; ld d,13\r
out (c),d ; address WR13\r
--- /dev/null
+; escc.asm\r
+; Interrupt driven serial driver for built in Z180 ports (Hytech CMX)\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+$ io64180.inc\r
+\r
+ extern _sdevs\r
+ extern _K_OS_Intrp_Entry\r
+ extern _K_OS_Intrp_Exit\r
+ extern ?BANK_CALL_DIRECT_L08\r
+ extern ?BANK_FAST_LEAVE_L08\r
+ extern abyte\r
+\r
+XMIT_SIZE equ 256 ; must match cxfuncs.h, size of transmitter buffer\r
+RECV_SIZE equ 256 ; must match cxfuncs.h, size of reciever buffer\r
+\r
+; must match cxfuncs.h, fields in SDEV structure: ** ASSUMES 3 BYTE CODE PTRS!\r
+sxmit equ 0 ; offset of embedded CMX XMIT structure\r
+srecv equ 13 ; offset of embedded CMX RECV structure\r
+sport equ 13+13\r
+stxvec equ 13+13+1 ; called by interrupt, returns l=chr\r
+srxvec equ 13+13+4 ; called by interrupt, passed c=chr\r
+smsvec equ 13+13+7 ; called by interrupt, passed c=bits\r
+sesvec equ 13+13+10 ; called by interrupt, passed c=bits\r
+stevec equ 13+13+13 ; vector to start asci/escc transmitter\r
+stdvec equ 13+13+16 ; vector to stop asci/escc transmitter\r
+sstat equ 13+13+19 ; address to read status (8530 02xxh)\r
+stxdr equ 13+13+20 ; address to write tx data (8530 02xxh)\r
+srxdr equ 13+13+21 ; address to read rx data (8530 02xxh)\r
+swr1 equ 13+13+22 ; wr1 contents (interrupt enable bits)\r
+swr5 equ 13+13+23 ; wr5 contents (modem control outputs)\r
+swr15 equ 13+13+24 ; wr15 contents (modem control int ena)\r
+sinint equ 13+13+25 ; says whether wr1 really reflects wr1!\r
+sdvlen equ 13+13+26 ; byte size of block per serial port\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ rseg CODE\r
+\r
+ public _escc0_setup\r
+\r
+_escc0_setup::\r
+ push bc\r
+ push de\r
+\r
+ ld iy,_sdevs+2*sdvlen\r
+ ld (iy+sstat),.low.AC8530\r
+ ld (iy+stxdr),.low.AD8530\r
+ ld (iy+srxdr),.low.AD8530\r
+ ld (iy+stevec),.low._escc_tx_enable\r
+ ld (iy+stevec+1),.high._escc_tx_enable\r
+ ld (iy+stevec+2),BYTE3 _escc_tx_enable\r
+\r
+ ld bc,AC8530\r
+ di ; so int doesn't corrupt address reg\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00000010b\r
+ out (c),a ; mie off, status lo, no vector\r
+\r
+ nop ; ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,10000010b\r
+ out (c),a ; channel reset A, status lo, no vector\r
+\r
+ ; allow at least 4 clock cycles for reset\r
+\r
+ ld d,5\r
+ out (c),d ; address WR5\r
+ ld a,11101010b\r
+ out (c),a ; dtr on, 8 data, tx enable, rts on\r
+ ld (iy+swr5),a ; set up shadow for swr5sb, swr5rb\r
+\r
+ ld d,2\r
+ out (c),d ; address WR2\r
+ sub a\r
+ out (c),a ; redundantly set up interrupt vector\r
+\r
+ ld d,4\r
+ out (c),d ; address WR4\r
+ ld a,01000100b ; *16 with 1 stop bit, no parity\r
+ out (c),a\r
+\r
+ ld d,3\r
+ out (c),d ; address WR3\r
+ ld a,11000001b\r
+ out (c),a ; 8 data, auto disable, rx enable\r
+\r
+ ld d,15\r
+ out (c),d ; address WR15\r
+ sub a\r
+ out (c),a ; modem status interrupts disabled\r
+ ld (iy+swr15),a ; set up shadow for swr15s, swr15r\r
+\r
+ dec d ; ld d,14\r
+ out (c),d ; address WR14\r
+ sub a\r
+ out (c),a ; disable baud rate generator\r
+\r
+ ld d,12\r
+ out (c),d ; address WR12\r
+ ld a,10 ; 10=38400 6=57600 4=76800 2=115200\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,13\r
+ out (c),d ; address WR13\r
+ sub a\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,14\r
+ out (c),d ; address WR14\r
+ ld a,00000010b\r
+ out (c),a ; set pclk input\r
+ nop ; ld d,14\r
+ out (c),d ; address WR14\r
+ or 1\r
+ out (c),a ; enable baud rate generator\r
+ ld d,11\r
+ out (c),d ; address WR11\r
+ ld a,01010010b ; use baud rate generator\r
+ out (c),a\r
+\r
+ ld d,1\r
+ out (c),d ; address WR1\r
+ ld a,00010001b\r
+ out (c),a ; rx int on all, no tx int, ext int\r
+ ld (iy+swr1),a ; set up shadow for swr1sb, swr1rb\r
+\r
+ ld a,00010000b ; reset ext status ints\r
+ out (c),a\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00001010b ; mie on, status lo, no vector\r
+ out (c),a\r
+\r
+; not yet... this will be done by the escc1 setup routine when both ports ok\r
+; in0 a,(ITC)\r
+; or INT2SW\r
+; out0 (ITC),a\r
+\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+ public _escc1_setup\r
+\r
+_escc1_setup::\r
+ push bc\r
+ push de\r
+\r
+ ld iy,_sdevs+3*sdvlen\r
+ ld (iy+sstat),.low.BC8530\r
+ ld (iy+stxdr),.low.BD8530\r
+ ld (iy+srxdr),.low.BD8530\r
+ ld (iy+stevec),.low._escc_tx_enable\r
+ ld (iy+stevec+1),.high._escc_tx_enable\r
+ ld (iy+stevec+2),BYTE3 _escc_tx_enable\r
+\r
+ ld bc,BC8530\r
+ di ; so int doesn't corrupt address reg\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00000010b\r
+ out (c),a ; mie off, status lo, no vector\r
+\r
+ nop ; ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,01000010b\r
+ out (c),a ; channel reset B, status lo, no vector\r
+\r
+ ; allow at least 4 clock cycles for reset\r
+\r
+ ld d,5\r
+ out (c),d ; address WR5\r
+ ld a,11101010b\r
+ out (c),a ; dtr on, 8 data, tx enable, rts on\r
+ ld (iy+swr5),a ; set up shadow for swr5sb, swr5rb\r
+\r
+ ld d,2\r
+ out (c),d ; address WR2\r
+ sub a\r
+ out (c),a ; redundantly set up interrupt vector\r
+\r
+ ld d,4\r
+ out (c),d ; address WR4\r
+ ld a,01000100b ; *16 with 1 stop bit, no parity\r
+ out (c),a\r
+\r
+ ld d,3\r
+ out (c),d ; address WR3\r
+ ld a,11000001b\r
+ out (c),a ; 8 data, auto disable, rx enable\r
+\r
+ ld d,15\r
+ out (c),d ; address WR15\r
+ sub a\r
+ out (c),a ; modem status interrupts disabled\r
+ ld (iy+swr15),a ; set up shadow for swr15s, swr15r\r
+\r
+ dec d ; ld d,14\r
+ out (c),d ; address WR14\r
+ sub a\r
+ out (c),a ; disable baud rate generator\r
+\r
+ ld d,12\r
+ out (c),d ; address WR12\r
+ ld a,6 ; 10=38400 6=57600 4=76800 2=115200\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,13\r
+ out (c),d ; address WR13\r
+ sub a\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,14\r
+ out (c),d ; address WR14\r
+ ld a,00000010b\r
+ out (c),a ; set pclk input\r
+ nop ; ld d,14\r
+ out (c),d ; address WR14\r
+ inc a ; or 1\r
+ out (c),a ; enable baud rate generator\r
+ ld d,11\r
+ out (c),d ; address WR11\r
+ ld a,01010010b ; use baud rate generator\r
+ out (c),a\r
+\r
+ ld d,1\r
+ out (c),d ; address WR1\r
+ ld a,00010001b\r
+ out (c),a ; rx int on all, no tx int, ext int\r
+ ld (iy+swr1),a ; set up shadow for swr1sb, swr1rb\r
+\r
+; this is only done for S3DEV, and is intended to disconnect LAN optocoupler\r
+ ld d,5\r
+ out (c),d ; address WR5\r
+ ld a,11101000b\r
+ out (c),a ; dtr on, 8 data, tx enable, rts off\r
+ ld (iy+swr5),a ; update our knowledge of wr5 contents\r
+\r
+ ld a,00010000b ; reset ext status ints\r
+ out (c),a\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00001010b ; mie on, status lo, no vector\r
+ out (c),a\r
+\r
+ in0 a,(ITC)\r
+ or INT2SW\r
+ out0 (ITC),a\r
+\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ public _escc_tx_enable\r
+\r
+_escc_tx_enable::\r
+ push bc\r
+ push de\r
+\r
+; ld iy,_sdevs+0*sdvlen\r
+ push de\r
+ pop iy\r
+ di\r
+ .if 1\r
+ ld hl,LWRD swr1te\r
+ ld a,BYTE3 swr1te\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .else\r
+ call swr1te\r
+ .endif\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+; ret\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+ public _escc_tx_disable\r
+\r
+_escc_tx_disable::\r
+ push bc\r
+ push de\r
+\r
+; ld iy,_sdevs+0*sdvlen\r
+ push de\r
+ pop iy\r
+ di\r
+ .if 1\r
+ ld hl,LWRD swr1td\r
+ ld a,BYTE3 swr1td\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .else\r
+ call swr1td\r
+ .endif\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+; ret\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ rseg RCODE\r
+\r
+ public _int2_vector\r
+\r
+_int2_vector::\r
+ .if 1\r
+ ;ld a,'.'\r
+ ;out0 (TDR1),a\r
+ call _K_OS_Intrp_Entry\r
+ .else\r
+ push af\r
+ push bc\r
+ push de\r
+ push hl\r
+ push iy\r
+ .endif\r
+\r
+ .if 1\r
+ ld bc,AC8530\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00000010b\r
+ out (c),a ; mie off, status lo, no vector\r
+ ei ; allow other interrupts to occur\r
+ .endif\r
+\r
+ .if 1\r
+ .if 1 ; prevent overrun by polling the ports after each interrupt\r
+ ld hl,LWRD si23iv\r
+ ld a,BYTE3 si23iv\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ ; routine to allow arbitrary tests for rx char (prevents overrun)\r
+ ld bc,AC8530 ; enter with interrupts disabled!!\r
+ in a,(c) ; read rr0 (channel a = s2dev)\r
+ rra ; test bit 0 = rx char available\r
+\r
+ ld hl,LWRD si2rx\r
+ ld a,BYTE3 si2rx\r
+ call c,?BANK_CALL_DIRECT_L08 ; something ready, use the normal si2rx\r
+ ; (this clobbers bc if char received)\r
+ ld bc,BC8530\r
+ in a,(c) ; read rr0\r
+ rra ; test bit 0 = rx char available\r
+\r
+ ld hl,LWRD si3rx\r
+ ld a,BYTE3 si3rx\r
+ call c,?BANK_CALL_DIRECT_L08 ; something ready, use the normal si2rx\r
+ ; (this clobbers bc if char received)\r
+ .else\r
+ ld hl,LWRD si23\r
+ ld a,BYTE3 si23\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ call si23\r
+ .endif\r
+\r
+ .if 1\r
+ ld bc,AC8530\r
+ di ; prevent ints occurring immediately\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00001010b\r
+ out (c),a ; mie on, status lo, no vector\r
+ .endif\r
+\r
+ .if 1\r
+ call _K_OS_Intrp_Exit\r
+ .else\r
+ pop iy\r
+ pop hl\r
+ pop de\r
+ pop bc\r
+ pop af\r
+ ei\r
+ ret\r
+ .endif\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ rseg CODE\r
+\r
+ .if 0 ; 17sep02 routine to allow arbitrary tests for rx char (prevents overrun)\r
+ .if 1 ; 17sep02 enhancement for extra safety against overruns (esp. @ 6.144 mhz)\r
+public si23\r
+\r
+si23:\r
+ .if 1\r
+ ld hl,LWRD si23iv\r
+ ld a,BYTE3 si23iv\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .else\r
+ call LWRD si23iv ; first process interrupt via vector\r
+ .endif\r
+ ; fall into si23rx routine (it could also be useful during other ints!)\r
+ .endif\r
+\r
+public si23rx\r
+\r
+si23rx: ; routine to allow arbitrary tests for rx char (prevents overrun)\r
+ ld bc,AC8530 ; enter with interrupts disabled!!\r
+ in a,(c) ; read rr0 (channel a = s2dev)\r
+ rra ; test bit 0 = rx char available\r
+ .if 1\r
+ ld hl,LWRD si2rx\r
+ ld a,BYTE3 si2rx\r
+ call c,?BANK_CALL_DIRECT_L08 ; something ready, use the normal si2rx\r
+ .else\r
+ call c,LWRD si2rx ; something ready, use the normal si2rx\r
+ .endif\r
+ ; (this clobbers bc if char received)\r
+ ld bc,BC8530\r
+ in a,(c) ; read rr0\r
+ rra ; test bit 0 = rx char available\r
+ .if 1\r
+ jp nc,?BANK_FAST_LEAVE_L08 ; nothing ready, no-op (ints disabled)\r
+ .else\r
+ ret nc ; nothing ready, no-op (ints disabled)\r
+ .endif\r
+ ; fall into the same si3rx routine as used by the interrupt system\r
+ jp LWRD si3rx\r
+ .endif\r
+\r
+ .if 0\r
+silly: ; enter with special receive condition status byte in e\r
+ ld a,e\r
+ rrca\r
+ rrca\r
+ rrca\r
+ rrca\r
+ and 7\r
+ add a,'0'\r
+ rst 18h ;call abyte\r
+ ret\r
+ .endif\r
+\r
+ .if 0\r
+sillyx: ; enter with modem control input status byte in e\r
+ ld a,e\r
+ and 28h\r
+ rrca ; 14h\r
+ rrca ; 0ah\r
+ rrca ; 05h\r
+ add a,'0'\r
+ rst 18h ;call abyte\r
+ ret\r
+ .endif\r
+\r
+si3tx:\r
+ .if 1\r
+ ld iy,_sdevs+3*sdvlen\r
+ .endif\r
+\r
+ .if 1\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+stxvec)\r
+ ld a,(_sdevs+3*sdvlen+stxvec+2)\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ inc h ; hl = 0ffffh indicates no char for tx\r
+ jp z,LWRD swr1td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,BD8530\r
+ out (c),l ; send char on behalf of client\r
+ .else\r
+ ld bc,(_sdevs+3*sdvlen+stxvec)\r
+ call 0eb53h ; winved\r
+ di ;;!! 24may02 for no good reason\r
+ jp c,swr1td ;jr c,si3td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,BD8530\r
+ out (c),e ; send char on behalf of client\r
+ .endif\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret ;jr si23 ; check for further interrupts pending\r
+ .endif\r
+\r
+;si3td: call swr1td ; serial write register 1 tx disable\r
+; ret ;jr si23 ; check for further interrupts pending\r
+\r
+ .if 1 ; 16dec01 so that swint can be a regular modem status handler\r
+si3ms:\r
+ .if 0\r
+ ld iy,_sdevs+3*sdvlen\r
+ .endif\r
+ in e,(c) ; read modem status inputs for client\r
+\r
+ .if 0\r
+ call sillyx\r
+ .endif\r
+\r
+ ld a,00010000b ; reset ext status interrupts\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+smsvec)\r
+ ld a,(_sdevs+3*sdvlen+smsvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+3*sdvlen+smsvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+ .else\r
+si3ms: ; bc is already set up to read channel b modem status\r
+; call swint\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp swint\r
+ .endif\r
+\r
+si3rx:\r
+ .if 0\r
+ ld iy,_sdevs+3*sdvlen\r
+ .endif\r
+\r
+ ld c,low BD8530\r
+ .if 1\r
+ in c,(c) ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+srxvec)\r
+ ld a,(_sdevs+3*sdvlen+srxvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ in e,(c) ; read character for client\r
+\r
+ ld bc,(_sdevs+3*sdvlen+srxvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+si3es: dec d ; ld d,1\r
+ out (c),d ; select rr1\r
+ .if 0\r
+ ld iy,_sdevs+3*sdvlen\r
+ .else\r
+ nop\r
+ .endif\r
+ in e,(c) ; read special receive condition status\r
+\r
+ .if 0\r
+ call silly\r
+ .endif\r
+\r
+ .if 0 ; 16dec01 when nothing pending, go to clkint via s3dev error status\r
+ .if 1 ; 16oct02 make sure we don't depend on ckimsr when the hardware is new\r
+ ld a,(hwtype)\r
+ or a\r
+ jr nz,skpclk\r
+ .endif\r
+ ld a,e\r
+ and 01110000b ; bit 6=framing, 5=overrun, 4=parity\r
+ ;jp z,int2c ; in ser.mac for no good reason\r
+ jr z,int2c ; 14jun02 now here, & proper ret logic\r
+ .if 1 ; 16oct02 make sure we don't depend on ckimsr when the hardware is new\r
+skpclk:\r
+ .endif\r
+ .endif\r
+\r
+ .if 0\r
+ ld a,'%'\r
+ rst 18h ;call abyte\r
+ .endif\r
+\r
+ ld a,00110000b ; error reset\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+sesvec)\r
+ ld a,(_sdevs+3*sdvlen+sesvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+3*sdvlen+sesvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+ .if 0 ; 14jun02 this is now moved to ser.inc as it was misleading\r
+int2c:\r
+ .if noints\r
+ ld bc,ckimsr\r
+ in a,(c) ; reset irq\r
+ ret ;jr si23\r
+ .else\r
+ wjpd clkint ; clock is interrupting\r
+ ; clkint should be modified,\r
+ ; as it no longer needs to preserve de/hl/iy\r
+ .endif\r
+ .endif\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ .if 1 ; 17sep02 enhancement for extra safety against overruns (esp. 6.144 MHz)\r
+si23iv: ; routine to perform interrupt vectoring... not the main int. handler!\r
+ .else\r
+public si23\r
+\r
+si23: ; without the enhancement, this routine is also the main int. handler!\r
+ .endif\r
+ .if 0 ; 20may02 hope this works (it does, but see below)\r
+ ld a,'.'\r
+ call abyte\r
+ .endif\r
+ ld bc,BC8530\r
+ ld d,2\r
+ out (c),d ; select rr2\r
+ ld hl,LWRD si23jt-200h ; we'll also rely on d=2 later\r
+ in e,(c) ; read interrupt vector with status\r
+ .if 0;xyz1 ; 15dec01 diagnostic interrupt vector output, requires abfast\r
+ ld a,e\r
+ rrca\r
+ add a,10h\r
+ ;bit 1,e ; 0 indicates tx/rx int, 1 indicates modem/error int\r
+ ;call nz,abyte\r
+ out0 (TDR1),a\r
+ .endif\r
+ add hl,de\r
+ jp (hl)\r
+\r
+si23jt: jr si3tx\r
+ jr si3ms\r
+ jr si3rx\r
+ jr si3es\r
+ jr si2tx\r
+ jr si2ms\r
+ jr si2rx\r
+ jr si2es\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+si2tx:\r
+ .if 1\r
+ ld iy,_sdevs+2*sdvlen\r
+ .endif\r
+\r
+ .if 1\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+stxvec)\r
+ ld a,(_sdevs+2*sdvlen+stxvec+2)\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ inc h ; hl = 0ffffh indicates no char for tx\r
+ jp z,LWRD swr1td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,AD8530\r
+ out (c),l ; send char on behalf of client\r
+ .else\r
+ ld bc,(_sdevs+2*sdvlen+stxvec)\r
+ call 0eb53h ; winved\r
+ di ;;!! 24may02 for no good reason\r
+ jp c,swr1td ;jr c,si2td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,AD8530\r
+ out (c),e ; send char on behalf of client\r
+ .endif\r
+; ld a,e\r
+; jp abyte\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret ;jr si23 ; check for further interrupts pending\r
+ .endif\r
+\r
+;si2td: call swr1td ; serial write register 1 tx disable\r
+; ret ;jr si23 ; check for further interrupts pending\r
+\r
+si2ms:\r
+ .if 0\r
+ ld iy,_sdevs+2*sdvlen\r
+ .endif\r
+\r
+ inc c ; ld c,low AC8530\r
+ in e,(c) ; read modem status inputs for client\r
+\r
+ ld a,00010000b ; reset ext status interrupts\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+smsvec)\r
+ ld a,(_sdevs+2*sdvlen+smsvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+2*sdvlen+smsvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+si2rx:\r
+ .if 0\r
+ ld iy,_sdevs+2*sdvlen\r
+ .endif\r
+\r
+ ld c,low AD8530\r
+ .if 1\r
+ in c,(c) ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+srxvec)\r
+ ld a,(_sdevs+2*sdvlen+srxvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ in e,(c) ; read character for client\r
+\r
+ ld bc,(_sdevs+2*sdvlen+srxvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+si2es: inc c ; ld c,low AC8530\r
+ dec d ; ld d,1\r
+ out (c),d ; select rr1\r
+ .if 0\r
+ ld iy,_sdevs+2*sdvlen\r
+ .else\r
+ nop\r
+ .endif\r
+ in e,(c) ; read special receive condition status\r
+\r
+ ld a,00110000b ; error reset\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+sesvec)\r
+ ld a,(_sdevs+2*sdvlen+sesvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+2*sdvlen+sesvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+; rather silly routine provided to save code space in the handlers above:\r
+\r
+?BANK_JMP_DIRECT_L08:\r
+ call ?BANK_CALL_DIRECT_L08\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+; -----------------------------------------------------------------------------\r
+; utility subroutines for use by our clients - 8530 ports (serial 2/3)\r
+\r
+swr1te: ; serial write register 1 transmit enable - enter with di\r
+ ;ld a,(iy+sdev)\r
+ ;cp s2dev\r
+ ;ld a,'e'\r
+ ;call z,abyte\r
+\r
+; ld a,(iy+sdev)\r
+; cp s2dev\r
+; jr nz,twatx\r
+; call twatx\r
+; jp abyte\r
+;twatx:\r
+ bit 1,(iy+swr1)\r
+; ld a,'a'\r
+ .if 1\r
+ jp nz,?BANK_FAST_LEAVE_L08 ; transmit interrupt already enabled\r
+ .else\r
+ ret nz ; transmit interrupt already enabled\r
+ .endif\r
+\r
+ .if 1\r
+ push iy\r
+ pop de ; de = 1st parameter (word16)\r
+\r
+ ld l,(iy+stxvec)\r
+ ld h,(iy+stxvec+1)\r
+ ld a,(iy+stxvec+2)\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ inc h ; hl = 0ffffh indicates no char for tx\r
+; ld a,'b'\r
+ .if 1\r
+ jp z,?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret z\r
+ .endif\r
+ .else\r
+ ld c,(iy+stxvec)\r
+ ld b,(iy+stxvec+1)\r
+ call 0eb53h ; winved\r
+; ld a,'b'\r
+ ret c ; there was really nothing to transmit\r
+ ld l,e\r
+ .endif\r
+\r
+ ld e,2\r
+ .if 1\r
+ push hl ; oops !\r
+ ld hl,LWRD swr1sb\r
+ ld a,BYTE3 swr1sb\r
+ call ?BANK_CALL_DIRECT_L08 ; explicitly enable transmit interrupt\r
+ pop hl ; oops !\r
+ .else\r
+ call LWRD swr1sb ; explicitly enable transmit interrupt\r
+ .endif\r
+\r
+ ld c,(iy+stxdr)\r
+ out (c),l ; send char on behalf of client\r
+; ld a,(iy+sdev)\r
+; cp s2dev\r
+; ret nz\r
+; ld a,55h\r
+; call abyte\r
+; ld a,l\r
+; jp abyte\r
+; ld a,'c'\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr1sb: ; serial write register 1 set bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,1\r
+ out (c),d\r
+ ld a,e\r
+ or (iy+swr1)\r
+ out (c),a\r
+ ld (iy+swr1),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr1td: ; serial write register 1 transmit disable - enter with di\r
+ ;ld a,(iy+sdev)\r
+ ;cp s2dev\r
+ ;ld a,'d'\r
+ ;call z,abyte\r
+ ld e,0fdh\r
+swr1rb: ; serial write register 1 reset bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,1\r
+ out (c),d\r
+ ld a,e\r
+ and (iy+swr1)\r
+ out (c),a\r
+ ld (iy+swr1),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr5sb: ; serial write register 5 set bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,5\r
+ out (c),d\r
+ ld a,e\r
+ or (iy+swr5)\r
+ out (c),a\r
+ ld (iy+swr5),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr5rb: ; serial write register 5 reset bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,5\r
+ out (c),d\r
+ ld a,e\r
+ and (iy+swr5)\r
+ out (c),a\r
+ ld (iy+swr5),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr15s: ; serial write register 15 set bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,15\r
+ out (c),d\r
+ ld a,e\r
+ or (iy+swr15)\r
+ out (c),a\r
+ ld (iy+swr15),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr15r: ; serial write register 15 reset bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,15\r
+ out (c),d\r
+ ld a,e\r
+ and (iy+swr15)\r
+ out (c),a\r
+ ld (iy+swr15),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ END\r
--- /dev/null
+; escc.asm\r
+; Interrupt driven serial driver for built in Z180 ports (Hytech CMX)\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+$ io64180.inc\r
+\r
+ extern _sdevs\r
+ extern _K_OS_Intrp_Entry\r
+ extern _K_OS_Intrp_Exit\r
+ extern ?BANK_CALL_DIRECT_L08\r
+ extern ?BANK_FAST_LEAVE_L08\r
+ extern abyte\r
+\r
+XMIT_SIZE equ 256 ; must match cxfuncs.h, size of transmitter buffer\r
+RECV_SIZE equ 256 ; must match cxfuncs.h, size of reciever buffer\r
+\r
+; must match cxfuncs.h, fields in SDEV structure: ** ASSUMES 3 BYTE CODE PTRS!\r
+sxmit equ 0 ; offset of embedded CMX XMIT structure\r
+srecv equ 13 ; offset of embedded CMX RECV structure\r
+sport equ 13+13\r
+stxvec equ 13+13+1 ; called by interrupt, returns l=chr\r
+srxvec equ 13+13+4 ; called by interrupt, passed c=chr\r
+smsvec equ 13+13+7 ; called by interrupt, passed c=bits\r
+sesvec equ 13+13+10 ; called by interrupt, passed c=bits\r
+stevec equ 13+13+13 ; vector to start asci/escc transmitter\r
+stdvec equ 13+13+16 ; vector to stop asci/escc transmitter\r
+sstat equ 13+13+19 ; address to read status (8530 02xxh)\r
+stxdr equ 13+13+20 ; address to write tx data (8530 02xxh)\r
+srxdr equ 13+13+21 ; address to read rx data (8530 02xxh)\r
+swr1 equ 13+13+22 ; wr1 contents (interrupt enable bits)\r
+swr5 equ 13+13+23 ; wr5 contents (modem control outputs)\r
+swr15 equ 13+13+24 ; wr15 contents (modem control int ena)\r
+sinint equ 13+13+25 ; says whether wr1 really reflects wr1!\r
+sdvlen equ 13+13+26 ; byte size of block per serial port\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ rseg CODE\r
+\r
+ public _escc0_setup\r
+\r
+_escc0_setup::\r
+ push bc\r
+ push de\r
+\r
+ ld iy,_sdevs+2*sdvlen\r
+ ld (iy+sstat),.low.AC8530\r
+ ld (iy+stxdr),.low.AD8530\r
+ ld (iy+srxdr),.low.AD8530\r
+ ld (iy+stevec),.low._escc_tx_enable\r
+ ld (iy+stevec+1),.high._escc_tx_enable\r
+ ld (iy+stevec+2),BYTE3 _escc_tx_enable\r
+\r
+ ld bc,AC8530\r
+ di ; so int doesn't corrupt address reg\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00000010b\r
+ out (c),a ; mie off, status lo, no vector\r
+\r
+ nop ; ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,10000010b\r
+ out (c),a ; channel reset A, status lo, no vector\r
+\r
+ ; allow at least 4 clock cycles for reset\r
+\r
+ ld d,5\r
+ out (c),d ; address WR5\r
+ ld a,11101010b\r
+ out (c),a ; dtr on, 8 data, tx enable, rts on\r
+ ld (iy+swr5),a ; set up shadow for swr5sb, swr5rb\r
+\r
+ ld d,2\r
+ out (c),d ; address WR2\r
+ sub a\r
+ out (c),a ; redundantly set up interrupt vector\r
+\r
+ ld d,4\r
+ out (c),d ; address WR4\r
+ ld a,01000100b ; *16 with 1 stop bit, no parity\r
+ out (c),a\r
+\r
+ ld d,3\r
+ out (c),d ; address WR3\r
+ ld a,11000001b\r
+ out (c),a ; 8 data, auto disable, rx enable\r
+\r
+ ld d,15\r
+ out (c),d ; address WR15\r
+ sub a\r
+ out (c),a ; modem status interrupts disabled\r
+ ld (iy+swr15),a ; set up shadow for swr15s, swr15r\r
+\r
+ dec d ; ld d,14\r
+ out (c),d ; address WR14\r
+ sub a\r
+ out (c),a ; disable baud rate generator\r
+\r
+ ld d,12\r
+ out (c),d ; address WR12\r
+ ld a,6 ; 6=57600 4=76800 2=115200\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,13\r
+ out (c),d ; address WR13\r
+ sub a\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,14\r
+ out (c),d ; address WR14\r
+ ld a,00000010b\r
+ out (c),a ; set pclk input\r
+ nop ; ld d,14\r
+ out (c),d ; address WR14\r
+ or 1\r
+ out (c),a ; enable baud rate generator\r
+ ld d,11\r
+ out (c),d ; address WR11\r
+ ld a,01010010b ; use baud rate generator\r
+ out (c),a\r
+\r
+ ld d,1\r
+ out (c),d ; address WR1\r
+ ld a,00010001b\r
+ out (c),a ; rx int on all, no tx int, ext int\r
+ ld (iy+swr1),a ; set up shadow for swr1sb, swr1rb\r
+\r
+ ld a,00010000b ; reset ext status ints\r
+ out (c),a\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00001010b ; mie on, status lo, no vector\r
+ out (c),a\r
+\r
+; not yet... this will be done by the escc1 setup routine when both ports ok\r
+; in0 a,(ITC)\r
+; or INT2SW\r
+; out0 (ITC),a\r
+\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+ public _escc1_setup\r
+\r
+_escc1_setup::\r
+ push bc\r
+ push de\r
+\r
+ ld iy,_sdevs+3*sdvlen\r
+ ld (iy+sstat),.low.BC8530\r
+ ld (iy+stxdr),.low.BD8530\r
+ ld (iy+srxdr),.low.BD8530\r
+ ld (iy+stevec),.low._escc_tx_enable\r
+ ld (iy+stevec+1),.high._escc_tx_enable\r
+ ld (iy+stevec+2),BYTE3 _escc_tx_enable\r
+\r
+ ld bc,BC8530\r
+ di ; so int doesn't corrupt address reg\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00000010b\r
+ out (c),a ; mie off, status lo, no vector\r
+\r
+ nop ; ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,01000010b\r
+ out (c),a ; channel reset B, status lo, no vector\r
+\r
+ ; allow at least 4 clock cycles for reset\r
+\r
+ ld d,5\r
+ out (c),d ; address WR5\r
+ ld a,11101010b\r
+ out (c),a ; dtr on, 8 data, tx enable, rts on\r
+ ld (iy+swr5),a ; set up shadow for swr5sb, swr5rb\r
+\r
+ ld d,2\r
+ out (c),d ; address WR2\r
+ sub a\r
+ out (c),a ; redundantly set up interrupt vector\r
+\r
+ ld d,4\r
+ out (c),d ; address WR4\r
+ ld a,01000100b ; *16 with 1 stop bit, no parity\r
+ out (c),a\r
+\r
+ ld d,3\r
+ out (c),d ; address WR3\r
+ ld a,11000001b\r
+ out (c),a ; 8 data, auto disable, rx enable\r
+\r
+ ld d,15\r
+ out (c),d ; address WR15\r
+ sub a\r
+ out (c),a ; modem status interrupts disabled\r
+ ld (iy+swr15),a ; set up shadow for swr15s, swr15r\r
+\r
+ dec d ; ld d,14\r
+ out (c),d ; address WR14\r
+ sub a\r
+ out (c),a ; disable baud rate generator\r
+\r
+ ld d,12\r
+ out (c),d ; address WR12\r
+ ld a,6 ; 6=57600 4=76800 2=115200\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,13\r
+ out (c),d ; address WR13\r
+ sub a\r
+ out (c),a ; divisor 0002h indicates 115200 bps\r
+ inc d ; ld d,14\r
+ out (c),d ; address WR14\r
+ ld a,00000010b\r
+ out (c),a ; set pclk input\r
+ nop ; ld d,14\r
+ out (c),d ; address WR14\r
+ inc a ; or 1\r
+ out (c),a ; enable baud rate generator\r
+ ld d,11\r
+ out (c),d ; address WR11\r
+ ld a,01010010b ; use baud rate generator\r
+ out (c),a\r
+\r
+ ld d,1\r
+ out (c),d ; address WR1\r
+ ld a,00010001b\r
+ out (c),a ; rx int on all, no tx int, ext int\r
+ ld (iy+swr1),a ; set up shadow for swr1sb, swr1rb\r
+\r
+; this is only done for S3DEV, and is intended to disconnect LAN optocoupler\r
+ ld d,5\r
+ out (c),d ; address WR5\r
+ ld a,11101000b\r
+ out (c),a ; dtr on, 8 data, tx enable, rts off\r
+ ld (iy+swr5),a ; update our knowledge of wr5 contents\r
+\r
+ ld a,00010000b ; reset ext status ints\r
+ out (c),a\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00001010b ; mie on, status lo, no vector\r
+ out (c),a\r
+\r
+ in0 a,(ITC)\r
+ or INT2SW\r
+ out0 (ITC),a\r
+\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ public _escc_tx_enable\r
+\r
+_escc_tx_enable::\r
+ push bc\r
+ push de\r
+\r
+; ld iy,_sdevs+0*sdvlen\r
+ push de\r
+ pop iy\r
+ di\r
+ .if 1\r
+ ld hl,LWRD swr1te\r
+ ld a,BYTE3 swr1te\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .else\r
+ call swr1te\r
+ .endif\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+; ret\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+ public _escc_tx_disable\r
+\r
+_escc_tx_disable::\r
+ push bc\r
+ push de\r
+\r
+; ld iy,_sdevs+0*sdvlen\r
+ push de\r
+ pop iy\r
+ di\r
+ .if 1\r
+ ld hl,LWRD swr1td\r
+ ld a,BYTE3 swr1td\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .else\r
+ call swr1td\r
+ .endif\r
+ ei\r
+\r
+ pop de\r
+ pop bc\r
+; ret\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ rseg RCODE\r
+\r
+ public _int2_vector\r
+\r
+_int2_vector::\r
+ .if 1\r
+ ;ld a,'.'\r
+ ;out0 (TDR1),a\r
+ call _K_OS_Intrp_Entry\r
+ .else\r
+ push af\r
+ push bc\r
+ push de\r
+ push hl\r
+ push iy\r
+ .endif\r
+\r
+ .if 1\r
+ ld bc,AC8530\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00000010b\r
+ out (c),a ; mie off, status lo, no vector\r
+ ei ; allow other interrupts to occur\r
+ .endif\r
+\r
+ .if 1\r
+ .if 1 ; prevent overrun by polling the ports after each interrupt\r
+ ld hl,LWRD si23iv\r
+ ld a,BYTE3 si23iv\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ ; routine to allow arbitrary tests for rx char (prevents overrun)\r
+ ld bc,AC8530 ; enter with interrupts disabled!!\r
+ in a,(c) ; read rr0 (channel a = s2dev)\r
+ rra ; test bit 0 = rx char available\r
+\r
+ ld hl,LWRD si2rx\r
+ ld a,BYTE3 si2rx\r
+ call c,?BANK_CALL_DIRECT_L08 ; something ready, use the normal si2rx\r
+ ; (this clobbers bc if char received)\r
+ ld bc,BC8530\r
+ in a,(c) ; read rr0\r
+ rra ; test bit 0 = rx char available\r
+\r
+ ld hl,LWRD si3rx\r
+ ld a,BYTE3 si3rx\r
+ call c,?BANK_CALL_DIRECT_L08 ; something ready, use the normal si2rx\r
+ ; (this clobbers bc if char received)\r
+ .else\r
+ ld hl,LWRD si23\r
+ ld a,BYTE3 si23\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ call si23\r
+ .endif\r
+\r
+ .if 1\r
+ ld bc,AC8530\r
+ di ; prevent ints occurring immediately\r
+ in (c) ;f,(c) ; reset pointer bits\r
+\r
+ ld d,9\r
+ out (c),d ; address WR9\r
+ ld a,00001010b\r
+ out (c),a ; mie on, status lo, no vector\r
+ .endif\r
+\r
+ .if 1\r
+ call _K_OS_Intrp_Exit\r
+ .else\r
+ pop iy\r
+ pop hl\r
+ pop de\r
+ pop bc\r
+ pop af\r
+ ei\r
+ ret\r
+ .endif\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ rseg CODE\r
+\r
+ .if 0 ; 17sep02 routine to allow arbitrary tests for rx char (prevents overrun)\r
+ .if 1 ; 17sep02 enhancement for extra safety against overruns (esp. @ 6.144 mhz)\r
+public si23\r
+\r
+si23:\r
+ .if 1\r
+ ld hl,LWRD si23iv\r
+ ld a,BYTE3 si23iv\r
+ call ?BANK_CALL_DIRECT_L08\r
+ .else\r
+ call LWRD si23iv ; first process interrupt via vector\r
+ .endif\r
+ ; fall into si23rx routine (it could also be useful during other ints!)\r
+ .endif\r
+\r
+public si23rx\r
+\r
+si23rx: ; routine to allow arbitrary tests for rx char (prevents overrun)\r
+ ld bc,AC8530 ; enter with interrupts disabled!!\r
+ in a,(c) ; read rr0 (channel a = s2dev)\r
+ rra ; test bit 0 = rx char available\r
+ .if 1\r
+ ld hl,LWRD si2rx\r
+ ld a,BYTE3 si2rx\r
+ call c,?BANK_CALL_DIRECT_L08 ; something ready, use the normal si2rx\r
+ .else\r
+ call c,LWRD si2rx ; something ready, use the normal si2rx\r
+ .endif\r
+ ; (this clobbers bc if char received)\r
+ ld bc,BC8530\r
+ in a,(c) ; read rr0\r
+ rra ; test bit 0 = rx char available\r
+ .if 1\r
+ jp nc,?BANK_FAST_LEAVE_L08 ; nothing ready, no-op (ints disabled)\r
+ .else\r
+ ret nc ; nothing ready, no-op (ints disabled)\r
+ .endif\r
+ ; fall into the same si3rx routine as used by the interrupt system\r
+ jp LWRD si3rx\r
+ .endif\r
+\r
+ .if 0\r
+silly: ; enter with special receive condition status byte in e\r
+ ld a,e\r
+ rrca\r
+ rrca\r
+ rrca\r
+ rrca\r
+ and 7\r
+ add a,'0'\r
+ rst 18h ;call abyte\r
+ ret\r
+ .endif\r
+\r
+ .if 0\r
+sillyx: ; enter with modem control input status byte in e\r
+ ld a,e\r
+ and 28h\r
+ rrca ; 14h\r
+ rrca ; 0ah\r
+ rrca ; 05h\r
+ add a,'0'\r
+ rst 18h ;call abyte\r
+ ret\r
+ .endif\r
+\r
+si3tx:\r
+ .if 1\r
+ ld iy,_sdevs+3*sdvlen\r
+ .endif\r
+\r
+ .if 1\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+stxvec)\r
+ ld a,(_sdevs+3*sdvlen+stxvec+2)\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ inc h ; hl = 0ffffh indicates no char for tx\r
+ jp z,LWRD swr1td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,BD8530\r
+ out (c),l ; send char on behalf of client\r
+ .else\r
+ ld bc,(_sdevs+3*sdvlen+stxvec)\r
+ call 0eb53h ; winved\r
+ di ;;!! 24may02 for no good reason\r
+ jp c,swr1td ;jr c,si3td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,BD8530\r
+ out (c),e ; send char on behalf of client\r
+ .endif\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret ;jr si23 ; check for further interrupts pending\r
+ .endif\r
+\r
+;si3td: call swr1td ; serial write register 1 tx disable\r
+; ret ;jr si23 ; check for further interrupts pending\r
+\r
+ .if 1 ; 16dec01 so that swint can be a regular modem status handler\r
+si3ms:\r
+ .if 0\r
+ ld iy,_sdevs+3*sdvlen\r
+ .endif\r
+ in e,(c) ; read modem status inputs for client\r
+\r
+ .if 0\r
+ call sillyx\r
+ .endif\r
+\r
+ ld a,00010000b ; reset ext status interrupts\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+smsvec)\r
+ ld a,(_sdevs+3*sdvlen+smsvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+3*sdvlen+smsvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+ .else\r
+si3ms: ; bc is already set up to read channel b modem status\r
+; call swint\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp swint\r
+ .endif\r
+\r
+si3rx:\r
+ .if 0\r
+ ld iy,_sdevs+3*sdvlen\r
+ .endif\r
+\r
+ ld c,low BD8530\r
+ .if 1\r
+ in c,(c) ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+srxvec)\r
+ ld a,(_sdevs+3*sdvlen+srxvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ in e,(c) ; read character for client\r
+\r
+ ld bc,(_sdevs+3*sdvlen+srxvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+si3es: dec d ; ld d,1\r
+ out (c),d ; select rr1\r
+ .if 0\r
+ ld iy,_sdevs+3*sdvlen\r
+ .else\r
+ nop\r
+ .endif\r
+ in e,(c) ; read special receive condition status\r
+\r
+ .if 0\r
+ call silly\r
+ .endif\r
+\r
+ .if 0 ; 16dec01 when nothing pending, go to clkint via s3dev error status\r
+ .if 1 ; 16oct02 make sure we don't depend on ckimsr when the hardware is new\r
+ ld a,(hwtype)\r
+ or a\r
+ jr nz,skpclk\r
+ .endif\r
+ ld a,e\r
+ and 01110000b ; bit 6=framing, 5=overrun, 4=parity\r
+ ;jp z,int2c ; in ser.mac for no good reason\r
+ jr z,int2c ; 14jun02 now here, & proper ret logic\r
+ .if 1 ; 16oct02 make sure we don't depend on ckimsr when the hardware is new\r
+skpclk:\r
+ .endif\r
+ .endif\r
+\r
+ .if 0\r
+ ld a,'%'\r
+ rst 18h ;call abyte\r
+ .endif\r
+\r
+ ld a,00110000b ; error reset\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+3*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+3*sdvlen+sesvec)\r
+ ld a,(_sdevs+3*sdvlen+sesvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+3*sdvlen+sesvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+ .if 0 ; 14jun02 this is now moved to ser.inc as it was misleading\r
+int2c:\r
+ .if noints\r
+ ld bc,ckimsr\r
+ in a,(c) ; reset irq\r
+ ret ;jr si23\r
+ .else\r
+ wjpd clkint ; clock is interrupting\r
+ ; clkint should be modified,\r
+ ; as it no longer needs to preserve de/hl/iy\r
+ .endif\r
+ .endif\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ .if 1 ; 17sep02 enhancement for extra safety against overruns (esp. 6.144 MHz)\r
+si23iv: ; routine to perform interrupt vectoring... not the main int. handler!\r
+ .else\r
+public si23\r
+\r
+si23: ; without the enhancement, this routine is also the main int. handler!\r
+ .endif\r
+ .if 0 ; 20may02 hope this works (it does, but see below)\r
+ ld a,'.'\r
+ call abyte\r
+ .endif\r
+ ld bc,BC8530\r
+ ld d,2\r
+ out (c),d ; select rr2\r
+ ld hl,LWRD si23jt-200h ; we'll also rely on d=2 later\r
+ in e,(c) ; read interrupt vector with status\r
+ .if 0;xyz1 ; 15dec01 diagnostic interrupt vector output, requires abfast\r
+ ld a,e\r
+ rrca\r
+ add a,10h\r
+ ;bit 1,e ; 0 indicates tx/rx int, 1 indicates modem/error int\r
+ ;call nz,abyte\r
+ out0 (TDR1),a\r
+ .endif\r
+ add hl,de\r
+ jp (hl)\r
+\r
+si23jt: jr si3tx\r
+ jr si3ms\r
+ jr si3rx\r
+ jr si3es\r
+ jr si2tx\r
+ jr si2ms\r
+ jr si2rx\r
+ jr si2es\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+si2tx:\r
+ .if 1\r
+ ld iy,_sdevs+2*sdvlen\r
+ .endif\r
+\r
+ .if 1\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+stxvec)\r
+ ld a,(_sdevs+2*sdvlen+stxvec+2)\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ inc h ; hl = 0ffffh indicates no char for tx\r
+ jp z,LWRD swr1td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,AD8530\r
+ out (c),l ; send char on behalf of client\r
+ .else\r
+ ld bc,(_sdevs+2*sdvlen+stxvec)\r
+ call 0eb53h ; winved\r
+ di ;;!! 24may02 for no good reason\r
+ jp c,swr1td ;jr c,si2td\r
+\r
+ ; client has provided character for tx, send it\r
+ ld bc,AD8530\r
+ out (c),e ; send char on behalf of client\r
+ .endif\r
+; ld a,e\r
+; jp abyte\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret ;jr si23 ; check for further interrupts pending\r
+ .endif\r
+\r
+;si2td: call swr1td ; serial write register 1 tx disable\r
+; ret ;jr si23 ; check for further interrupts pending\r
+\r
+si2ms:\r
+ .if 0\r
+ ld iy,_sdevs+2*sdvlen\r
+ .endif\r
+\r
+ inc c ; ld c,low AC8530\r
+ in e,(c) ; read modem status inputs for client\r
+\r
+ ld a,00010000b ; reset ext status interrupts\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+smsvec)\r
+ ld a,(_sdevs+2*sdvlen+smsvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+2*sdvlen+smsvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+si2rx:\r
+ .if 0\r
+ ld iy,_sdevs+2*sdvlen\r
+ .endif\r
+\r
+ ld c,low AD8530\r
+ .if 1\r
+ in c,(c) ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+srxvec)\r
+ ld a,(_sdevs+2*sdvlen+srxvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ in e,(c) ; read character for client\r
+\r
+ ld bc,(_sdevs+2*sdvlen+srxvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+si2es: inc c ; ld c,low AC8530\r
+ dec d ; ld d,1\r
+ out (c),d ; select rr1\r
+ .if 0\r
+ ld iy,_sdevs+2*sdvlen\r
+ .else\r
+ nop\r
+ .endif\r
+ in e,(c) ; read special receive condition status\r
+\r
+ ld a,00110000b ; error reset\r
+ out (c),a\r
+\r
+ .if 1\r
+ ld c,e ; c = 2nd parameter (byte)\r
+ ld de,_sdevs+2*sdvlen ; de = 1st parameter (word16)\r
+\r
+ ld hl,(_sdevs+2*sdvlen+sesvec)\r
+ ld a,(_sdevs+2*sdvlen+sesvec+2)\r
+ .if 1\r
+ jp LWRD ?BANK_JMP_DIRECT_L08\r
+ .else\r
+ jp ?BANK_CALL_DIRECT_L08\r
+ .endif\r
+ .else\r
+ ld bc,(_sdevs+2*sdvlen+sesvec)\r
+; call 0eb53h ; winved, ignore the cf return for now\r
+; ret ;jr si23 ; check for further interrupts pending\r
+ jp 0eb53h ; winved, ignore the cf return for now\r
+ .endif\r
+\r
+; rather silly routine provided to save code space in the handlers above:\r
+\r
+?BANK_JMP_DIRECT_L08:\r
+ call ?BANK_CALL_DIRECT_L08\r
+ jp ?BANK_FAST_LEAVE_L08\r
+\r
+; -----------------------------------------------------------------------------\r
+; utility subroutines for use by our clients - 8530 ports (serial 2/3)\r
+\r
+swr1te: ; serial write register 1 transmit enable - enter with di\r
+ ;ld a,(iy+sdev)\r
+ ;cp s2dev\r
+ ;ld a,'e'\r
+ ;call z,abyte\r
+\r
+; ld a,(iy+sdev)\r
+; cp s2dev\r
+; jr nz,twatx\r
+; call twatx\r
+; jp abyte\r
+;twatx:\r
+ bit 1,(iy+swr1)\r
+; ld a,'a'\r
+ .if 1\r
+ jp nz,?BANK_FAST_LEAVE_L08 ; transmit interrupt already enabled\r
+ .else\r
+ ret nz ; transmit interrupt already enabled\r
+ .endif\r
+\r
+ .if 1\r
+ push iy\r
+ pop de ; de = 1st parameter (word16)\r
+\r
+ ld l,(iy+stxvec)\r
+ ld h,(iy+stxvec+1)\r
+ ld a,(iy+stxvec+2)\r
+ call ?BANK_CALL_DIRECT_L08\r
+\r
+ inc h ; hl = 0ffffh indicates no char for tx\r
+; ld a,'b'\r
+ .if 1\r
+ jp z,?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret z\r
+ .endif\r
+ .else\r
+ ld c,(iy+stxvec)\r
+ ld b,(iy+stxvec+1)\r
+ call 0eb53h ; winved\r
+; ld a,'b'\r
+ ret c ; there was really nothing to transmit\r
+ ld l,e\r
+ .endif\r
+\r
+ ld e,2\r
+ .if 1\r
+ push hl ; oops !\r
+ ld hl,LWRD swr1sb\r
+ ld a,BYTE3 swr1sb\r
+ call ?BANK_CALL_DIRECT_L08 ; explicitly enable transmit interrupt\r
+ pop hl ; oops !\r
+ .else\r
+ call LWRD swr1sb ; explicitly enable transmit interrupt\r
+ .endif\r
+\r
+ ld c,(iy+stxdr)\r
+ out (c),l ; send char on behalf of client\r
+; ld a,(iy+sdev)\r
+; cp s2dev\r
+; ret nz\r
+; ld a,55h\r
+; call abyte\r
+; ld a,l\r
+; jp abyte\r
+; ld a,'c'\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr1sb: ; serial write register 1 set bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,1\r
+ out (c),d\r
+ ld a,e\r
+ or (iy+swr1)\r
+ out (c),a\r
+ ld (iy+swr1),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr1td: ; serial write register 1 transmit disable - enter with di\r
+ ;ld a,(iy+sdev)\r
+ ;cp s2dev\r
+ ;ld a,'d'\r
+ ;call z,abyte\r
+ ld e,0fdh\r
+swr1rb: ; serial write register 1 reset bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,1\r
+ out (c),d\r
+ ld a,e\r
+ and (iy+swr1)\r
+ out (c),a\r
+ ld (iy+swr1),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr5sb: ; serial write register 5 set bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,5\r
+ out (c),d\r
+ ld a,e\r
+ or (iy+swr5)\r
+ out (c),a\r
+ ld (iy+swr5),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr5rb: ; serial write register 5 reset bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,5\r
+ out (c),d\r
+ ld a,e\r
+ and (iy+swr5)\r
+ out (c),a\r
+ ld (iy+swr5),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr15s: ; serial write register 15 set bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,15\r
+ out (c),d\r
+ ld a,e\r
+ or (iy+swr15)\r
+ out (c),a\r
+ ld (iy+swr15),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+swr15r: ; serial write register 15 reset bits - enter with di\r
+ ld c,(iy+sstat)\r
+ ld b,2 ;(iy+sbase)\r
+ ld d,15\r
+ out (c),d\r
+ ld a,e\r
+ and (iy+swr15)\r
+ out (c),a\r
+ ld (iy+swr15),a\r
+ .if 1\r
+ jp ?BANK_FAST_LEAVE_L08\r
+ .else\r
+ ret\r
+ .endif\r
+\r
+; -----------------------------------------------------------------------------\r
+\r
+ END\r
-k ..\..\..\lib\r
+-l libsysb.lib\r
+-l libcb.lib\r
-l libiar.lib\r
-m\r
-u\r
-k ..\..\..\lib\r
+-l libsysb.lib\r
+-l libc.lib\r
-l libiar.lib\r
-m\r
-u\r
exit\r
_exit\r
testsystem\r
+touchscreen\r
cd build\r
copy ..\kernel.lnk\r
copy ..\build.ban n.bat\r
-call n\r
+call n %1\r
cd ..\r
--- /dev/null
+md build\r
+cd build\r
+copy ..\kernel.lnk\r
+copy ..\build.ban n.bat\r
+call n\r
+cd ..\r
--- /dev/null
+/* devno.h for UZI180 by Rob */
+
+#define DEVOUT_BASE 0x20 /* above this number means output to device */
+
+#define _2SDEV(p) ((p)-1) /* p is a minor device number */
+#define _2MINOR(p) ((p)+1) /* p is an SDEV device number */
+
+
+/* Minor device numbers */
+#define DEV_S0 1 /* Serial 0 */
+#define DEV_S1 2 /* Serial 1 */
+#define DEV_S2 3 /* Serial 2 */
+#define DEV_S3 4 /* Serial 3 */
+#define DEV_LC 5 /* Load cell */
+#define DEV_TS 6 /* Touchscreen */
+#define DEV_CD 7 /* Customer display */
+#define DEV_TP 9 /* Thermal printer */
+
+
+/*
+ * Struct functioning as a wrapper to certain parts of SDEV,
+ * in order to maintain some extra administration for devices
+ */
+typedef struct
+{
+ char tsyshook;
+ /*
+ * vector[0] occupied by test system RX hook
+ * vector[1] occupied by device original RX handler
+ */
+ void (*saved_rx_vector[2])(SDEV *device, char c);
+} wsdevsT;
+
+extern wsdevsT wsdevs[PORTS];
+++ /dev/null
-/***************************************************************\r
- UZI (Unix Z80 Implementation) Kernel: devtty.c\r
-----------------------------------------------------------------\r
- Adapted from UZI By Doug Braun, and UZI280 by Stefan Nitschke\r
- Copyright (C) 1998 by Harold F. Bower\r
- Portions Copyright (C) 1995 by Stefan Nitschke\r
-****************************************************************/\r
-/* Revisions:\r
- * 22.12.97 - Moved __putc & tty_int to MACHASM.ASZ. HFB\r
- * 24.05.98 - Restructured tty_inproc, parse CTRL chars\r
- * based on flag set bit (deletes CPM_CTRL in 280), add\r
- * equate for Number of TTY terminals. HFB\r
- */\r
-\r
-#if 0 /* Nick */\r
-#define DEBUG /* UNdefine to delete debug code sequences */\r
-\r
-#define NTTYS 9 /* 2 */ /* Number of TTY ports defined */\r
-#endif\r
-\r
-#include "vendor.h" /* Nick, must come first */\r
-#include <unix.h>\r
-#include <config.h>\r
-#include <extern.h>\r
-#include "devtty.h" /* prototypes added by Nick */\r
-\r
-struct s_tty_data tty_data[NTTYS+1]; /* tty_data[0] is not used */\r
-\r
-struct s_tty_data tty_default =\r
- {\r
- 0, 0, '\b', CTRL('x'), DFLT_MODE,\r
- CTRL('c'), CTRL('\\'), CTRL('q'), CTRL('s'), CTRL('d'), 0\r
- };\r
-\r
-#if 1 /* Nick */\r
-void (*tty_vector[NTTYS+1])(int minor, char c) =\r
- {\r
- tty_inproc_dummy, /* this entry is never used */\r
- tty_inproc_dummy,\r
- tty_inproc_dummy,\r
- tty_inproc_dummy,\r
- tty_inproc_dummy,\r
- tty_inproc_dummy,\r
- tty_inproc_dummy,\r
- tty_inproc_dummy,\r
- tty_inproc_dummy,\r
- tty_inproc_dummy\r
- };\r
-\r
-extern char xmit_bufs[PORTS][XMIT_SIZE];\r
-extern char recv_bufs[PORTS][RECV_SIZE];\r
-\r
-struct s_queue ttyinq[NTTYS+1] =\r
- {\r
- { NULL, NULL, NULL, 0, 0, 0 }, /* this entry is never used */\r
- { recv_bufs[0], recv_bufs[0], recv_bufs[0], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[1], recv_bufs[1], recv_bufs[1], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[2], recv_bufs[2], recv_bufs[2], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[3], recv_bufs[3], recv_bufs[3], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[4], recv_bufs[4], recv_bufs[4], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[5], recv_bufs[5], recv_bufs[5], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[6], recv_bufs[6], recv_bufs[6], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[7], recv_bufs[7], recv_bufs[7], TTYSIZ, 0, TTYSIZ/2 },\r
- { recv_bufs[8], recv_bufs[8], recv_bufs[8], TTYSIZ, 0, TTYSIZ/2 }\r
- };\r
-#else\r
-/* Character Input Queue size */\r
-#define TTYSIZ 132\r
-\r
-char tbuf1[TTYSIZ];\r
-char tbuf2[TTYSIZ];\r
-\r
-struct s_queue ttyinq[NTTYS+1] = { /* ttyinq[0] is never used */\r
-{ NULL, NULL, NULL, 0, 0, 0 },\r
-{ tbuf1, tbuf1, tbuf1, TTYSIZ, 0, TTYSIZ/2 },\r
-{ tbuf2, tbuf2, tbuf2, TTYSIZ, 0, TTYSIZ/2 }\r
-};\r
-#endif\r
-\r
-int stopflag[NTTYS+1]; /* Flag for ^S/^Q */\r
-int flshflag[NTTYS+1]; /* Flag for ^O */\r
-\r
-int tty_read(uchar minor, uchar rawflag)\r
-{\r
- int nread;\r
- char c;\r
- int remq();\r
-\r
-#if DEBUG >= 2\r
- dprintf(2, "tty_read(%d, %d) starting\n", minor, rawflag);\r
-#endif\r
-\r
- /* Minor == 0 means that it is the controlling tty of the process */\r
- ifnot (minor)\r
- minor = udata.u_ptab->p_tty;\r
- ifnot (udata.u_ptab->p_tty)\r
- udata.u_ptab->p_tty = minor;\r
-\r
- if ((minor < 1) || (minor > NTTYS+1)) {\r
- udata.u_error = ENODEV;\r
-#if DEBUG >= 2\r
- dprintf(2, "tty_read() returning -1, error %d\n", udata.u_error);\r
-#endif\r
- return (-1);\r
- }\r
-\r
- nread = 0;\r
- while (nread < udata.u_count)\r
- {\r
- for (;;)\r
- {\r
- di_absolute(); /* Nick */\r
- if (remq (&ttyinq[minor], &c)) {\r
-#if 1 /* Nick */\r
- ei_absolute(); /* Nick */\r
-#endif\r
- if (udata.u_sysio)\r
- *udata.u_base = c;\r
- else\r
- uputc (c, udata.u_base);\r
- break;\r
- }\r
-#if 1 /* Nick */\r
- ei_absolute();\r
-#endif\r
-#if 1 /* Nick */\r
- /* In unbuffered mode, don't wait when no input */\r
- if (tty_data[minor].t_flags & UNBUFF)\r
- {\r
-#if DEBUG >= 2\r
- dprintf(2, "tty_read() returning %d, success\n", nread);\r
-#endif\r
- return(nread);\r
- }\r
-#endif\r
-#if 1 /* Nick, original uzi code, it can be handy to disable this sometimes */\r
- psleep (&ttyinq[minor]);\r
- if (udata.u_cursig || udata.u_ptab->p_pending) { /* messy */\r
- udata.u_error = EINTR;\r
-#if DEBUG >= 2\r
- dprintf(2, "tty_read() returning -1, error %d\n", udata.u_error);\r
-#endif\r
- return (-1);\r
- }\r
-#endif\r
- }\r
-#if 0 /* Nick, removed as this is now done immediately after calling remq */\r
- ei_absolute(); /* Nick */\r
-#endif\r
- if ((nread++ == 0) && (c == tty_data[minor].t_eof)) /* ^D */\r
- {\r
-#if DEBUG >= 2\r
- dprintf(2, "tty_read() returning 0, eof\n");\r
-#endif\r
- return(0);\r
- }\r
-\r
- /* In raw or cbreak mode, return after one char */\r
-#if 1 /* Nick */\r
- if ((tty_data[minor].t_flags & UNBUFF) == 0 &&\r
- (c == '\n' || tty_data[minor].t_flags & (RAW|CBREAK)))\r
- {\r
- break;\r
- }\r
-#else\r
- if (tty_data[minor].t_flags & (RAW|CBREAK))\r
- break;\r
- if (c == '\n')\r
- break;\r
-#endif\r
- ++udata.u_base;\r
- } \r
-#if DEBUG >= 2\r
- dprintf(2, "tty_read() returning %d, success\n", nread);\r
-#endif\r
- return(nread);\r
-}\r
-\r
-\r
-\r
-int tty_write(uchar minor, uchar rawflag)\r
-{\r
- int towrite, c;\r
-/* Nick int ugetc(); */\r
-\r
- /* Minor == 0 means that it is the controlling tty of the process */\r
- ifnot (minor)\r
- minor = udata.u_ptab->p_tty;\r
- ifnot (udata.u_ptab->p_tty)\r
- udata.u_ptab->p_tty = minor;\r
-\r
- if ((minor < 1) || (minor > NTTYS+1)) {\r
- udata.u_error = ENODEV;\r
- return (-1);\r
- }\r
-\r
- towrite = udata.u_count;\r
-\r
- while (udata.u_count-- != 0)\r
- {\r
- for (;;) /* Wait on the ^S/^Q flag */\r
- {\r
- di_absolute(); /* Nick */\r
- ifnot (stopflag[minor])\r
- break;\r
- psleep (&stopflag[minor]);\r
- if (udata.u_cursig || udata.u_ptab->p_pending) /* messy */\r
- {\r
- udata.u_error = EINTR;\r
- return (-1);\r
- }\r
- }\r
- ei_absolute(); /* Nick */\r
-\r
- ifnot (flshflag[minor])\r
- {\r
- if (udata.u_sysio)\r
- c = *udata.u_base;\r
- else\r
- c = ugetc (udata.u_base);\r
-\r
- if (c == '\n' && (tty_data[minor].t_flags & CRMOD))\r
- _putc (minor, '\r');\r
- _putc (minor, c);\r
- }\r
- ++udata.u_base;\r
- }\r
- return (towrite);\r
-}\r
-\r
-\r
-\r
-int tty_open(uchar minor)\r
-{\r
- /* Minor == 0 means that it is the controlling tty of the process */\r
- ifnot (minor)\r
- minor = udata.u_ptab->p_tty;\r
-\r
-#if 1 /* Nick */\r
- if ((minor < 1) || (minor > NTTYS+1))\r
- {\r
- udata.u_error = ENODEV;\r
- return (-1);\r
- }\r
-#endif\r
-\r
- /* If there is no controlling tty for the process, establish it */\r
- ifnot (udata.u_ptab->p_tty)\r
- udata.u_ptab->p_tty = minor;\r
-\r
- /* Initialize the tty_data */\r
- bcopy (&tty_default, &tty_data[minor], sizeof (struct s_tty_data));\r
-\r
-#if 1 /* Nick */\r
- di_absolute();\r
- tty_vector[minor] = tty_inproc;\r
- ei_absolute();\r
-#endif\r
-\r
- return (0);\r
-}\r
-\r
-\r
-int tty_close(uchar minor)\r
-{\r
- /* If we are closing the controlling tty, make note */\r
- if (minor == udata.u_ptab->p_tty)\r
- udata.u_ptab->p_tty = 0;\r
-\r
-#if 1 /* Nick */\r
- if ((minor < 1) || (minor > NTTYS+1))\r
- {\r
- udata.u_error = ENODEV;\r
- return (-1);\r
- }\r
-#endif\r
-\r
-#if 1 /* Nick */\r
- di_absolute();\r
- tty_vector[minor] = tty_inproc_dummy;\r
- ei_absolute();\r
-#endif\r
-\r
- return (0);\r
-}\r
-\r
-\r
-/* Data in User Space */\r
-int tty_ioctl(uchar minor, int request, char *data)\r
-{\r
- /* Minor == 0 means that it is the controlling tty of the process */\r
- ifnot (minor)\r
- minor = udata.u_ptab->p_tty;\r
- if ((minor < 1) || (minor > NTTYS+1)) {\r
- udata.u_error = ENODEV;\r
- return (-1);\r
- }\r
- switch (request)\r
- {\r
- case TIOCGETP:\r
- uput (&tty_data[minor], data, 6);\r
- break;\r
- case TIOCSETP:\r
- uget (data, &tty_data[minor], 6);\r
- break;\r
- case TIOCGETC:\r
- uput (&tty_data[minor].t_intr, data, 5);\r
- break;\r
- case TIOCSETC:\r
- uget (data, &tty_data[minor].t_intr, 5);\r
- break;\r
- case TIOCSETN:\r
- uput (&ttyinq[minor].q_count, data, 2);\r
- break;\r
- case TIOCFLUSH:\r
- clrq (&tty_data[minor]);\r
- break;\r
- case TIOCTLSET:\r
- tty_data[minor].ctl_char = 1;\r
- break;\r
- case TIOCTLRES:\r
- tty_data[minor].ctl_char = 0;\r
- break;\r
- default:\r
- udata.u_error = EINVAL;\r
- return (-1);\r
- }\r
- return (0);\r
-}\r
-\r
-\r
-/* This routine processes a character in response to an interrupt. It\r
- * adds the character to the tty input queue, echoing and processing\r
- * backspace and carriage return. If the queue contains a full line,\r
- * it wakes up anything waiting on it. If it is totally full, it beeps\r
- * at the user.\r
- * UZI180 - This routine is called from the raw Hardware read routine,\r
- * either interrupt or polled, to process the input character. HFB\r
- */\r
-\r
-void tty_inproc(int minor, char c)\r
-{\r
- char oc;\r
- struct s_tty_data *td;\r
- int mode;\r
- int insq(), uninsq();\r
-\r
- td = &tty_data[minor];\r
-#if 1 /* Nick */\r
- if ((td->t_flags & (RAW|CBREAK|COOKED|UNBUFF)) == (RAW|UNBUFF))\r
- {\r
- insq (&ttyinq[minor], c);\r
- return; /* don't bother checking for error or waking task */\r
- }\r
-#endif\r
- mode = td->t_flags & (RAW|CBREAK|COOKED);\r
-\r
-/*** if (c == 0x1b && td->t_flags == DFLT_MODE)\r
-/*** return; /* my terminal hates it SN */\r
-\r
- if (mode != RAW)\r
- { /* Nick */\r
- c &= 0x7f; /* Strip off parity */\r
- if (!c)\r
- return; /* Simply quit if Null character */\r
- } /* Nick */\r
-\r
- if (td->ctl_char == 0) /* Don't parse ctl chars if Non-0 */\r
- {\r
- if ((mode & RAW) == 0) /* if mode == COOKED or CBREAK */\r
- {\r
-#if DEBUG\r
- if (c == 0x1a) /* ^Z */\r
- {\r
- idump(); /* (For debugging) */\r
- return;\r
- }\r
- else if (c == 0x0e) /* ^N Nick */\r
- {\r
- traceon = !traceon;\r
- return;\r
- }\r
-#endif\r
-\r
- if (c == '\r' && (td->t_flags & CRMOD))\r
- c = '\n';\r
-\r
- if (c == td->t_intr) { /* ^C */\r
- sgrpsig (minor, SIGQUIT);\r
- clrq (&ttyinq[minor]);\r
- stopflag[minor] = flshflag[minor] = 0;\r
- return;\r
- }\r
- else if (c == td->t_quit) { /* ^\ */\r
- sgrpsig (minor, SIGINT);\r
- clrq (&ttyinq[minor]);\r
- stopflag[minor] = flshflag[minor] = 0;\r
- return;\r
- }\r
- else if (c == '\017') { /* ^O */\r
- flshflag[minor] = !flshflag[minor];\r
- return;\r
- }\r
- else if (c == td->t_stop) { /* ^S */\r
- stopflag[minor] = 1;\r
- return;\r
- }\r
- else if (c == td->t_start) { /* ^Q */\r
- stopflag[minor] = 0;\r
- wakeup (&stopflag[minor]);\r
- return;\r
- }\r
- }\r
-\r
- if (mode == COOKED)\r
- {\r
- if (c == td->t_erase)\r
- {\r
- if (uninsq (&ttyinq[minor], &oc))\r
- {\r
- if (oc == '\n')\r
- insq (&ttyinq[minor], oc); /* Don't erase past nl */\r
- else\r
- {\r
- echo (minor, '\b');\r
- echo (minor, ' ');\r
- echo (minor, '\b');\r
- }\r
- }\r
- return;\r
- }\r
- else if (c == td->t_kill)\r
- {\r
- while (uninsq (&ttyinq[minor], &oc))\r
- {\r
- if (oc == '\n')\r
- {\r
- insq (&ttyinq[minor], oc); /* Don't erase past nl */\r
- break;\r
- }\r
- echo (minor, '\b');\r
- echo (minor, ' ');\r
- echo (minor, '\b');\r
- }\r
- return;\r
- }\r
- }\r
- }\r
- /* All modes come here */\r
-\r
- if (c == '\n' && (td->t_flags & CRMOD))\r
- echo (minor, '\r');\r
-\r
- if (insq (&ttyinq[minor], c))\r
- echo (minor, c);\r
- else\r
- _putc (minor, '\007'); /* Beep if no more room */\r
-\r
- if ((mode != COOKED || c == '\n' || c == td->t_eof)\r
- && (td->ctl_char == 0)) /* ^D */\r
- wakeup (&ttyinq[minor]);\r
-/* abyte('^'); */\r
-/* abyte(c); */\r
-/* while (1) */\r
-/* ; */\r
-}\r
-\r
-\r
-#if 1 /* Nick */\r
-void tty_inproc_dummy(int minor, char c)\r
- {\r
- }\r
-#endif\r
-\r
-\r
-void echo(int minor, char c)\r
-{\r
- if (tty_data[minor].t_flags & ECHO)\r
- _putc (minor, c);\r
-}\r
-\r
-\r
-#if 0\r
-char silly_pause(void)\r
- {\r
- char c;\r
-\r
- for (;;)\r
- {\r
- di_absolute(); /* Nick */\r
- if (remq (&ttyinq[2], &c))\r
- {\r
- return c;\r
- }\r
-#if 1 /* Nick... very temporary!! */\r
- ei_absolute();\r
-#endif\r
- }\r
- }\r
-#endif\r
-\r
-\r
#include <config.h>\r
#include <extern.h>\r
#include "devtty.h"\r
+#include "devno.h"\r
#include "touchscreen.h"\r
#include "testsystem.h"\r
\r
}\r
#endif\r
\r
+/* Admin. wrapper for sdevs */\r
+wsdevsT wsdevs[PORTS];\r
+\r
+\r
void main(int argc, char **argv)\r
{\r
#if 1\r
/* redirect incoming data from CompactFlash to the uzi scsi handler */\r
sdevs[10].rx_vector = compactflash_rx_handler;\r
\r
+ K_OS_Enable_Interrupts();\r
+\r
+ /* initialise device extra administration */\r
+ memset(&wsdevs, 0, sizeof(wsdevsT));\r
+\r
/* initialise test system */\r
testsystem_init();\r
\r
/* initialise touchscreen hooks */\r
touchscreen_init();\r
\r
- K_OS_Enable_Interrupts();\r
#endif\r
\r
K_OS_Start(); /* enter CMX RTOS */\r
*dest++ = *src++;\r
}\r
}\r
-\r
int int_min(int a, int b)\r
{\r
return (b < a ? b : a);\r
+++ /dev/null
-/* main.c for uzi180 by Nick - initialises CMX and then starts UZI as a task */\r
-\r
-/* #define POLLED */ /* causes console I/O to be output via abyte() */\r
-\r
-#include "vendor.h" /* Nick, must come first */\r
-#include <cxfuncs.h>\r
-#include <cxextern.h>\r
-#include <string.h>\r
-#include <unix.h>\r
-#include <config.h>\r
-#include <extern.h>\r
-#include "devtty.h"\r
-\r
-void asci0_setup(void);\r
-void asci1_setup(void);\r
-void escc0_setup(void);\r
-void escc1_setup(void);\r
-void apibus_setup(void);\r
-void apibus_priority(char command);\r
-void timer0_setup(void); /* initializes timer 3, for CMX tick */\r
-\r
-extern char osBank; /* defined in machasm */\r
-/* extern int root_dev; /* should be dev_t */ /* defined in extern.h */\r
-\r
-/* extern char silly; */ /* Nick, very silly !! */\r
-extern char rom_serial_no[]; /* 5 digits (leading space padded) plus null */\r
-\r
-#if 1 /* Nick UZIX compatible */\r
-char UZIX[14]="UZI180"; /* Nick "UZIX"; should be 13 chars or fewer */\r
-char HOST[14]="sn00000"; /* Nick kdata.k_host should be 13 chars or fewer */\r
-#endif\r
-\r
-byte uzi_slot; /* UZI task global slot number */\r
-extern void initsys(void); /* start of the UZI task's code */\r
-\r
-extern char cmdblk[8]; /* for scsiop(), defined in devhd.c */\r
-extern long hd_offset;\r
-extern long hd_sector;\r
-extern char *dptr;\r
-extern int dlen;\r
-extern char *cptr;\r
-extern int busid;\r
-\r
-void main(int argc, char **argv);\r
-void timer0_handler(void);\r
-#if 0 /* Nick, see kprintf.c */\r
-void kprintf(char *fmt, ...);\r
-#endif\r
-void kputchar(char c);\r
-void puts(char *s);\r
-void _putc(int minor, char c);\r
-void tty_inproc(int minor, char c); /* in devtty.c */\r
-void my_tty_inproc(SDEV *device, char c);\r
-#if 0\r
-void my_tty_inproc5(SDEV *device, char c);\r
-#endif\r
-#if 0 /* Nick, see kprintf.c */\r
-char *itob(int n, char *s, int base);\r
-#endif\r
-void bzero(char *ptr, int count);\r
-void bcopy(char *src, char *dest, int count);\r
-int int_min(int a, int b);\r
-int int_max(int a, int b);\r
-int scsiop(void);\r
-void my_compactflash_in(SDEV *device, char c);\r
-void my_touchscreen_in(SDEV *device, char c);\r
-void sttime(time_t *tvec);\r
-void hostname_setup(void);\r
-\r
-#if 0\r
-tcbpointer compactflash_tcbptr; /* must be initialised to NULL by runtime!! */\r
-#else\r
-char compactflash_enable; /* must be initialised to 0 by runtime!! */\r
-#endif\r
-\r
-#if 0\r
-byte t0_cnt; /* used by interrupt, for counter */\r
-byte go_ahead; /* used by interrupt, to determine when to send messages */\r
-\r
-char int_mesg[] = {"interrupt mesg"}; /* message that interrupt will send */\r
-#endif\r
-\r
-#if 0\r
-void initsysx(void)\r
- {\r
- while (1)\r
- {\r
- abyte ('#');\r
- }\r
- }\r
-#endif\r
-\r
-void main(int argc, char **argv)\r
- {\r
-#if 1\r
- int i;\r
-#endif\r
- byte status;\r
-\r
- /* abyte('C'); */\r
-\r
-#if 1\r
- amess("kernel: parameters:");\r
- if (argc < 2)\r
- {\r
- amess(" none");\r
- }\r
- else\r
- {\r
- for (i = 1; i < argc; i++)\r
- {\r
- abyte(' ');\r
- amess(argv[i]);\r
- }\r
- }\r
- acrlf();\r
-\r
- root_dev = -1;\r
- for (i = 1; i < argc; i++)\r
- {\r
- if (strlen(argv[i]) == 8 &&\r
- strncmp(argv[i], "root=hd", 7) == 0 &&\r
- (status = argv[i][7]) >= '0' && status <= '9')\r
- {\r
- root_dev = status - '0';\r
- }\r
- }\r
-/* abyte('a'); */\r
-#endif\r
-\r
- K_OS_Init(); /* initialize ram and things */\r
-/* abyte('b'); */\r
- K_Init_Sdevs(); /* set up serial port buffers */\r
-/* abyte('c'); */\r
- /* abyte('D'); */\r
-\r
- asci0_setup();\r
-/* abyte('d'); */\r
- asci1_setup();\r
-/* abyte('e'); */\r
- escc0_setup();\r
-/* abyte('f'); */\r
- escc1_setup();\r
-/* abyte('g'); */\r
- apibus_setup();\r
-/* abyte('h'); */\r
- /* abyte('E'); */\r
-\r
- /* initialise compactflash card (and synchronise WPO chip tx count) */\r
- K_Put_Str(10, "\x1bI", 2);\r
-/* abyte('i'); */\r
-\r
-#if 1\r
- K_Put_Str(1, "\r\nWelcome to Hytech CMX version 1.0\r\n", 37);\r
-/* abyte('j'); */\r
- /* abyte('F'); */\r
-#endif\r
-\r
- K_Task_Create(2, &uzi_slot, initsys, 128); /* create UZI task */\r
- K_Task_Start(uzi_slot); /* trigger UZI task */\r
-\r
- timer0_setup(); /* initialize and start timer, to produce CMX TICK */\r
- /* abyte('0'); */\r
-\r
-#if 0\r
- K_Put_Str(0, "\r\nHello from Hytech CMX, serial port 0\r\n", 40);\r
-/* K_Put_Str(1, "\r\nHello from Hytech CMX, serial port 1\r\n", 40); */\r
- K_Put_Str(2, "\r\nHello from Hytech CMX, serial port 2\r\n", 40);\r
- K_Put_Str(3, "\r\nHello from Hytech CMX, serial port 3\r\n", 40);\r
- K_Put_Str(5, "\x1bKHello from Hytech CMX, apibus port 5\r\n", 40);\r
- K_Put_Str(6, "\x1bKHello from Hytech CMX, apibus port 6\r\n", 40);\r
-#endif\r
-\r
-#if 0\r
- K_Put_Str(1, "\r\nPress any key to start the scheduler... ", 42);\r
-\r
- while (!K_Get_Char(1, &status))\r
- /* abyte('.') */; /* can't use CMX task blocking functions just yet */\r
- /* abyte('>'); */\r
-\r
- K_Put_Char(1, &status);\r
-\r
- K_Put_Str(1, "\r\nStarting the RTOS scheduler\r\n", 31);\r
-#endif\r
-\r
-#if 1\r
- hostname_setup();\r
-\r
- K_OS_Disable_Interrupts();\r
-\r
- /* redirect incoming characters on SERIAL 0 to the uzi tty handler */\r
- sdevs[0].rx_vector = my_tty_inproc;\r
- sdevs[1].rx_vector = my_tty_inproc;\r
- sdevs[2].rx_vector = my_tty_inproc;\r
- sdevs[3].rx_vector = my_tty_inproc;\r
- sdevs[4].rx_vector = my_tty_inproc;\r
- sdevs[5].rx_vector = my_touchscreen_in;\r
- sdevs[6].rx_vector = my_tty_inproc;\r
- sdevs[7].rx_vector = my_tty_inproc;\r
- sdevs[8].rx_vector = my_tty_inproc;\r
-\r
- /* redirect incoming data from CompactFlash to the uzi scsi handler */\r
- sdevs[10].rx_vector = my_compactflash_in;\r
-\r
- K_OS_Enable_Interrupts();\r
-#endif\r
-\r
- K_OS_Start(); /* enter CMX RTOS */\r
- }\r
-\r
-void timer0_handler(void)\r
- {\r
-#if 0 /* Nick, very temporary */\r
- K_OS_Tick_Update();\r
-#endif\r
-#if 0\r
- if (go_ahead) /* see if task has enable message sending */\r
- {\r
- if (++t0_cnt == 2) /* see if count = 2. */\r
- {\r
- t0_cnt = 0; /* reset count */\r
-\r
- /* The following allows an interrupt to use a CMX function, but\r
- it must use it indirectly. Thus the interrupt must call\r
- the respective CMX function with a leading 'int_' to the\r
- function. */\r
- K_Intrp_Mesg_Send(0,int_mesg);\r
- }\r
- }\r
-#endif\r
- }\r
-\r
-#if 0 /* Nick, see kprintf.c */\r
-void kprintf (char *fmt, ...)\r
-{\r
- register char *arg;\r
- register char c;\r
- int base;\r
- char s[7], *itob();\r
-\r
-/* abyte('{'); */\r
- arg = (char *)(&fmt+1); /* NOTE: Assumes Pointer to 2-byte Word */\r
-#if 0\r
- while (c = *fmt++)\r
- {\r
- kputchar(c);\r
- }\r
- ahexw(*(int *)arg);\r
- abyte('}');\r
- return;\r
-#endif\r
- while (c = *fmt++) {\r
- if (c != '%') {\r
- kputchar (c);\r
- continue;\r
- }\r
- switch (c = *fmt++) {\r
- case 'c': kputchar (*arg++); arg++; /* for IAR compiler */\r
- continue;\r
- case 'd': base = -10;\r
- goto prt;\r
- case 'o': base = 8;\r
- goto prt;\r
- case 'u': base = 10;\r
- goto prt;\r
- case 'p': /* Nick */\r
- case 'x': base = 16;\r
- prt:\r
- puts (itob (*(int *)arg, s, base));\r
- arg++; arg++; /* NOTE: for Size of Word Ptr */\r
- continue;\r
- case 's': puts (*(char **)arg);\r
- arg++; arg++; /* NOTE: for Size of Word Ptr */\r
- continue;\r
- default: kputchar (c);\r
- continue;\r
- }\r
- }\r
-/* abyte('}'); */\r
-}\r
-#endif\r
-\r
-void kputchar(char c)\r
- {\r
- if (c == '\n')\r
-#if 0\r
- {\r
- abyte('\r');\r
- }\r
- abyte(c);\r
-#else\r
- {\r
- _putc(0, '\r'); /* Use default TTY, minor=0 */\r
- }\r
- _putc(0, c);\r
-#endif\r
- }\r
-\r
-void puts(char *s)\r
- {\r
- while (*s)\r
- {\r
- kputchar(*s++);\r
- }\r
- }\r
-\r
-void _putc(int minor, char c)\r
- {\r
-#ifdef POLLED\r
- if (minor == 0 || minor == 2)\r
- {\r
- abyte(c);\r
-#else\r
- if (minor == 0)\r
- {\r
- K_Put_Char_Wait(1, &c, 0x1000);\r
-#endif\r
- }\r
- else\r
- {\r
- K_Put_Char_Wait(minor - 1, &c, 0x1000);\r
- }\r
- }\r
-\r
-void my_tty_inproc(SDEV *device, char c)\r
- {\r
-#if 1\r
- register int minor;\r
-\r
- minor = device->port + 1;\r
- (*tty_vector[minor])(minor, c);\r
-#else\r
- tty_inproc(1, c);\r
-#endif\r
- }\r
-\r
-#if 0\r
-void my_tty_inproc5(SDEV *device, char c)\r
- {\r
- tty_inproc(2, c);\r
- }\r
-#endif\r
-\r
-#if 0 /* Nick, see kprintf.c */\r
-#define TRUE 1\r
-#define FALSE 0\r
-\r
-/* convert an integer to a string in any base (2-36) */\r
-char *itob (int n, char *s, int base)\r
- {\r
- register unsigned int u;\r
- register char *p, *q;\r
- register negative, c;\r
- if ((n < 0) && (base == -10)) {\r
- negative = TRUE;\r
- u = -n;\r
- }\r
- else {\r
- negative = FALSE;\r
- u = n;\r
- }\r
- if (base == -10) /* Signals signed conversion */\r
- base = 10;\r
- p = q = s;\r
- do { /* Generate digits in reverse order */\r
- if ((*p = u % base + '0') > '9')\r
- *p += ('A' - ('9' + 1));\r
- ++p;\r
- u = u / base;\r
- } while (u > 0);\r
- if (negative)\r
- *p++ = '-';\r
- *p = '\0'; /* Terminate the string */\r
- while (q < --p) { /* Reverse the digits */\r
- c = *q;\r
- *q++ = *p;\r
- *p = c;\r
- }\r
- return s;\r
- }\r
-#endif\r
-\r
-void bzero(ptr, count)\r
-char *ptr;\r
-int count;\r
- {\r
- while (count--)\r
- {\r
- *ptr++ = 0;\r
- }\r
- }\r
-\r
-void bcopy(src, dest, count)\r
-char *src, *dest;\r
-int count;\r
- {\r
- while (count--)\r
- {\r
- *dest++ = *src++;\r
- }\r
- }\r
-\r
-int int_min(int a, int b)\r
-{\r
- return (b < a ? b : a);\r
-}\r
-\r
-int int_max(int a, int b)\r
-{\r
- return (b > a ? b : a);\r
-}\r
-\r
-int scsiop(void)\r
- {\r
- register char i, k;\r
- register unsigned int j; /* counts up to n*0x200 */\r
- char checksum; /* can't be register */\r
- int timecnt = 0x1000;\r
-\r
-#if 0\r
- if (silly == 0)\r
- while (1)\r
- ;\r
-#endif\r
-\r
-/** abyte(':'); **/\r
-#if 0 /* Nick very temporary */\r
- if (cmdblk[1] == 'W')\r
- return 0;\r
-#endif\r
-\r
-#if DEBUG >= 2\r
- dprintf(2, "scsiop: %c %u+%u,%u -> 0x%x\n", cmdblk[1],\r
- (unsigned int)hd_sector,\r
- (unsigned int)hd_offset,\r
- (unsigned int)cmdblk[7],\r
- (unsigned int)dptr);\r
-#endif\r
-\r
- /* check for special hd_offset indicating the ramdrive is wanted */\r
- if (hd_offset == 0)\r
- {\r
- j = ((unsigned int)cmdblk[7]) << 9;\r
- hd_sector = 0x40000L + (hd_sector << 9);\r
- hd_offset = (((long)osBank) << 12) + (long)dptr;\r
-\r
- switch(cmdblk[1])\r
- {\r
- case 'R':\r
-/* dprintf(2, "R %08lx -> %08lx, %04x\n", hd_sector, hd_offset, j); */\r
- copyr(hd_sector, hd_offset, j);\r
- break;\r
- case 'W':\r
-/* dprintf(2, "W %08lx -> %08lx, %04x\n", hd_offset, hd_sector, j); */\r
- copyr(hd_offset, hd_sector, j);\r
- break;\r
- }\r
-\r
- return 0;\r
- }\r
-\r
- /* at this point partitioning doesn't matter, so clobber hd_sector */\r
- hd_sector += hd_offset;\r
-/** abyte('a'); **/\r
-\r
- apibus_priority(0x17); /* set device 7 = priority 1 (maximum) */\r
-\r
- for (i = 0; i < cmdblk[7]; i++)\r
- {\r
-/** abyte('b'); **/\r
- cmdblk[2] = hd_sector;\r
- cmdblk[3] = hd_sector >> 8;\r
- cmdblk[4] = hd_sector >> 16;\r
- cmdblk[5] = hd_sector >> 24;\r
-/** abyte('c'); **/\r
- cmdblk[6] = 0xff - cmdblk[5] - cmdblk[4]\r
- - cmdblk[3] - cmdblk[2];\r
-/** abyte('d'); **/\r
-\r
-#if 0\r
- /* tell transmitter task waiting. */\r
- compactflash_tcbptr = activetcb;\r
-#else\r
- compactflash_enable = 1; /* prepare to receive esc sequence */\r
-#endif\r
-\r
-/* abyte('&'); */\r
- switch(cmdblk[1])\r
- {\r
-\r
- case 'R':\r
-/** abyte('e'); **/\r
- if (K_Put_Str_Wait(10, cmdblk, 7, timecnt) != K_OK)\r
- {\r
-/** abyte('f'); **/\r
- /* set device 7 = priority 7 (minimum) */\r
- apibus_priority(0x77);\r
-\r
- return 1;\r
- }\r
-/** abyte('g'); **/\r
- break;\r
-\r
- case 'W':\r
- if (K_Put_Str_Wait(10, cmdblk, 6, timecnt) != K_OK)\r
- {\r
- /* set device 7 = priority 7 (minimum) */\r
- apibus_priority(0x77);\r
-\r
- return 1;\r
- }\r
-\r
- checksum = cmdblk[6];\r
- for (j = 0; j < 0x200; j += 0x20)\r
- {\r
- if (K_Put_Str_Wait(10, dptr + j, 0x20, timecnt)\r
- != K_OK)\r
- {\r
- /* set device 7 = priority 7 (min) */\r
- apibus_priority(0x77);\r
-\r
- return 1;\r
- }\r
- for (k = 0; k < 0x20; k++)\r
- {\r
- checksum -= dptr[j + k];\r
- }\r
-/* abyte('.'); */\r
- }\r
-\r
- if (K_Put_Char_Wait(10, &checksum, timecnt) != K_OK)\r
- {\r
- /* set device 7 = priority 7 (minimum) */\r
- apibus_priority(0x77);\r
-\r
- return 1;\r
- }\r
- break;\r
-\r
- }\r
-\r
-/* abyte('*'); */\r
-#if 0\r
- K_I_Disable_Sched(); /* set task block. */\r
-\r
- /* see if still waiting for a response */\r
- K_OS_Disable_Interrupts(); /* DISABLE INTERRUPTS. */\r
- if (compactflash_tcbptr != NULL)\r
- {\r
- if (timecnt) /* wait on time too? */\r
- {\r
- /* put task to sleep, indicating why */\r
- activetcb->tcbstate = WAIT | TIME;\r
- }\r
- else\r
- {\r
- /* put task to sleep, indicating why */\r
- activetcb->tcbstate = WAIT;\r
- }\r
- K_OS_Enable_Interrupts(); /* RE-ENABLE INTERRUPTS */\r
-\r
- K_I_Insert_Link(timecnt); /* insert it into time link. */\r
- compactflash_tcbptr = NULL; /* task will return to here. */\r
-\r
- K_I_Disable_Sched(); /* set task block. */\r
- if(K_I_Remove_Link()) /* remove from link. */\r
- {\r
- /* set device 7 = priority 7 (minimum) */\r
- apibus_priority(0x77);\r
-\r
- K_I_Func_Return(); /* time out occurred. */\r
- return(K_TIMEOUT);\r
- }\r
- }\r
- else\r
- {\r
- K_OS_Enable_Interrupts(); /* RE-ENABLE INTERRUPTS */\r
- }\r
- K_I_Func_Return();\r
-#else\r
- while (compactflash_enable)\r
- ; /* rather primitive for the moment */\r
-#endif\r
-\r
- dptr += 0x200;\r
- hd_sector++;\r
- }\r
-/** abyte(';'); **/\r
-\r
- apibus_priority(0x77); /* set device 7 = priority 7 (minimum) */\r
-\r
- return 0;\r
- }\r
-\r
-void my_compactflash_in(SDEV *device, char c)\r
- {\r
- static char state = 0;\r
- static char *dest;\r
- static int count;\r
-\r
-#if 0\r
- if (compactflash_tcbptr == NULL)\r
-#else\r
- if (compactflash_enable == 0)\r
-#endif\r
- {\r
-#if 0\r
- if (c == '0' || c == '1')\r
- {\r
- abyte(c + 6);\r
- }\r
-#endif\r
- return;\r
- }\r
-\r
- switch (state)\r
- {\r
-\r
- case 0:\r
- switch (c)\r
- {\r
-\r
- case '0':\r
- case '1':\r
-#if 0\r
- abyte(c + 8);\r
-#endif\r
- break;\r
-\r
- case 0x1b:\r
- state++;\r
- break;\r
-\r
- }\r
- break;\r
-\r
- case 1:\r
- case 2:\r
- case 3:\r
- case 4:\r
-#if 0\r
- if (state == 1)\r
- {\r
- abyte(c);\r
- }\r
-#endif\r
- if (c == cmdblk[state])\r
- {\r
- state++;\r
- break;\r
- }\r
- state = 0;\r
- break;\r
-\r
- case 5:\r
- if (c == cmdblk[5])\r
- {\r
- switch (cmdblk[1])\r
- {\r
-\r
- case 'R':\r
- state = 6; /* reading, prepare for data xfer */\r
- dest = dptr;\r
- count = 0x200;\r
- break;\r
-\r
- case 'W':\r
- state = 7; /* writing, skip data xfer step */\r
- break;\r
-\r
- default:\r
- state = 0; /* should never get here */\r
- break;\r
-\r
- }\r
- break;\r
- }\r
- state = 0;\r
- break;\r
-\r
- case 6:\r
- cmdblk[6] -= c;\r
- *dest++ = c;\r
-#if 0\r
- if ((count & 0x1f) == 0)\r
- {\r
- abyte('.');\r
- }\r
-#endif\r
- if (--count)\r
- {\r
- break;\r
- }\r
- state = 7;\r
- break;\r
-\r
- case 7:\r
- if (c == cmdblk[6])\r
- {\r
-#if 0\r
- abyte('$');\r
-#endif\r
-#if 0\r
- /* see if task waiting. */\r
- if (compactflash_tcbptr->tcbstate & WAIT)\r
- {\r
- /* yes, wake task. */\r
- device->xmit.tcbptr->tcbstate = RESUME;\r
- if (compactflash_tcbptr->priority <\r
- active_priority)\r
- {\r
- PREEMPTED; /*cmx_flag1 |= preempted;*/ /* yes, set preempted K_I_Scheduler flag */\r
- }\r
- }\r
-\r
- compactflash_tcbptr = NULL;\r
-#else\r
- compactflash_enable = 0; /* command done ok */\r
-#endif\r
- }\r
-#if 0\r
- else { abyte('%'); }\r
-#endif\r
- /* we could also include retry stuff here */\r
- state = 0;\r
- break;\r
-\r
- }\r
- }\r
-\r
-void my_touchscreen_in(SDEV *device, char c)\r
- {\r
- static char state = 0;\r
- static unsigned char message[8];\r
-\r
- message[state] = c;\r
-\r
- switch (state)\r
- {\r
-\r
- case 0:\r
- switch (c)\r
- {\r
-\r
- case 0x1b:\r
- state++;\r
- break;\r
-\r
- default:\r
-#if 1\r
- (*tty_vector[6])(6, c);\r
-#else\r
- tty_inproc(2, c);\r
-#endif\r
- break;\r
-\r
- }\r
- break;\r
-\r
- case 1:\r
- if (c == 'T')\r
- {\r
- state++;\r
- }\r
- else\r
- {\r
- state = 0;\r
- }\r
- break;\r
-\r
- case 2: /* hour */\r
- case 3: /* mins */\r
- case 4: /* secs */\r
- case 5: /* month */\r
- case 6: /* day */\r
- state++;\r
- break;\r
-\r
- case 7: /* year-1980 */\r
- tod.t_time = ((int)message[4] >> 1) |\r
- ((int)message[3] << 5) |\r
- ((int)message[2] << 11);\r
-\r
- tod.t_date = (int)message[6] |\r
- ((int)message[5] << 5) |\r
- ((int)message[7] << 9);\r
-\r
- state = 0;\r
- break;\r
- }\r
- }\r
-\r
-void sttime(time_t *tvec)\r
- {\r
- char message[8];\r
-\r
- message[0] = 0x1b;\r
- message[1] = 'T';\r
- message[2] = (tvec->t_time >> 11) & 0x1f; /* hour */\r
- message[3] = (tvec->t_time >> 5) & 0x3f; /* mins */\r
- message[4] = (tvec->t_time << 1) & 0x3f; /* secs */\r
- message[5] = (tvec->t_date >> 5) & 0xf; /* month */\r
- message[6] = tvec->t_date & 0x1f; /* day */\r
- message[7] = (tvec->t_date >> 9) & 0x3f; /* year */\r
-\r
- if (K_Put_Str_Wait(5, message, 8, 0x1000) != K_OK)\r
- {\r
- panic("can't sttime");\r
- }\r
- }\r
-\r
-void hostname_setup(void)\r
- {\r
- register char i, j;\r
-\r
- for (i = 0; i < 5; i++)\r
- {\r
- if (rom_serial_no[i] != ' ')\r
- {\r
- break;\r
- }\r
- }\r
-\r
- j = 2;\r
- while (i < 5 && rom_serial_no[i])\r
- {\r
- HOST[j++] = rom_serial_no[i++];\r
- }\r
-\r
- HOST[j] = 0;\r
- }\r
-\r
#include <config.h>\r
#include <extern.h>\r
#include "devtty.h"\r
+#include <stdio.h>\r
+#include <syscalls.h>\r
+#include "kprintf.h"\r
+#include "extern.h"\r
+#include "devno.h"\r
+#include "touchscreen.h"\r
+#include "testsystem.h"\r
+\r
+\r
+extern void _putc(int minor, char c);\r
\r
-void _putc(int minor, char c);\r
void testsystem_rx_hook(SDEV *device, char c);\r
void testsystem_rx_handler(SDEV *device, char c);\r
\r
-void (*save_rx_vector[PORTS])(SDEV *device, char c);\r
+/* Testsystem defaults */\r
+tsysT tsys = {\r
+ 0, /* Testsystem not enabled */\r
+ 0 /* No recording of RTC data */\r
+ };\r
\r
\r
void testsystem_rx_handler(SDEV *device, char c)\r
{\r
- /* Do some special things */\r
+ /*\r
+ * Receives and interprets the input stream from Serial 3,\r
+ * which is assumed to be simulated or recorded data, interleaved\r
+ * with special command sequences.\r
+ */\r
+ static int state = 0, port = -1;\r
+\r
+ if (tsys.enabled)\r
+ {\r
+ /* Hunt for a command or escaped sequence (starts with ESC) */\r
+ if (c == 0x1b)\r
+ {\r
+ if (!state)\r
+ {\r
+ /* Start of command sequence */\r
+ state = 1;\r
+ return;\r
+ }\r
+ else\r
+ {\r
+ /* Escaped sequence */\r
+ state = 0;\r
+ }\r
+ }\r
+ else if (state)\r
+ {\r
+ switch (c)\r
+ {\r
+ case 'R': /* Toggle ext. RTC on/off */\r
+ rtc.source = rtc.source == RTC_INT ?\r
+ RTC_EXT :\r
+ RTC_INT;\r
+ break;\r
+ case 'r': /* Toggle recording int. RTC on/off */\r
+ tsys.rtc_rec = tsys.rtc_rec ? 0 : 1;\r
+ break;\r
+ default: /* 'Raw minor' device id */\r
+ port = c;\r
+ }\r
+ \r
+ state = 0;\r
+ return;\r
+ }\r
\r
- /* For now, just simulate touchscreen */\r
- device->port = 5;\r
- sdevs[device->port].rx_vector(device, c);\r
+\r
+ /*\r
+ * First assume simulated INPUT from device\r
+ */\r
+ switch (port)\r
+ {\r
+ case DEV_TS: /* Touchscreen */\r
+ if (rtc.source == RTC_EXT && RTC_extract(c, RTC_EXT))\r
+ break;\r
+ /* Fall through */\r
+ case DEV_TP: /* Thermal printer */\r
+ case DEV_S1: /* Serial 1 - scanner */\r
+ case DEV_LC: /* Load cell */\r
+ case DEV_CD: /* Customer display */\r
+ port = _2SDEV(port);\r
+ sdevs[port].rx_vector(&sdevs[port], c);\r
+ break;\r
+ default:\r
+ /*\r
+ * Next, assume OUTPUT to device;\r
+ * Bring 'raw minor' device id in normal range\r
+ */\r
+ port -= DEVOUT_BASE;\r
+\r
+ switch (port)\r
+ {\r
+ case DEV_TS:/* Touchscreen */\r
+ case DEV_TP:/* Thermal printer */\r
+ case DEV_S1:/* Serial 1 - scanner */\r
+ case DEV_LC:/* Load cell */\r
+ case DEV_CD:/* Customer display */\r
+#ifdef RPB_DEBUG\r
+ kprintf("p=%d, c=0x%x\n", port, c);\r
+#endif\r
+ _putc(port, c);\r
+ break;\r
+ default:\r
+ /* No such device */\r
+ kprintf("testsystem_rx_handler: ERROR port = %d, c = %d\n", port, c);\r
+ }\r
+ }\r
+ }\r
}\r
+ \r
+\r
\r
void testsystem_rx_hook(SDEV *device, char c)\r
{\r
- /* For now, just echo character on serial 3 */\r
- _putc(4, c);\r
+ /*\r
+ * Tags each received character with its source device id.\r
+ * Escapes special characters in the data stream.\r
+ */\r
+ static char current_port = 0;\r
+ char port;\r
+\r
+ if (tsys.enabled)\r
+ {\r
+ port = _2MINOR(device->port);\r
+\r
+ if (port != DEV_TS &&\r
+ port != DEV_TP &&\r
+ port != DEV_S1 &&\r
+ port != DEV_LC &&\r
+ port != DEV_CD) \r
+ {\r
+ /* Not supported yet or error */\r
+ kprintf("testsystem_rx_hook p=0x%x\n", (int)c);\r
+ return;\r
+ }\r
+\r
+#if 0\r
+ /*\r
+ * This part, remembering the current port, has problems\r
+ * with the testsystem_rx_handler() which keeps on\r
+ * interfering and overwrites 'current_port'.\r
+ * No solution to the problem yet (better understand it\r
+ * first), hence EACH received character output on S3\r
+ * is tagged with the device id.\r
+ */\r
+\r
+ /*\r
+ * This may cause problems since all testsystem_rx_hooks\r
+ * access this same static current_port. Should be protected\r
+ * by a mutex => TODO\r
+ */\r
+ if (port != current_port)\r
+ {\r
+ /* Insert minor device id before character received */\r
+ _putc(DEV_S3, 0x1b);\r
+ _putc(DEV_S3, port);\r
+ current_port = port;\r
+ }\r
+#endif\r
\r
- save_rx_vector[device->port](device, c);\r
+ /* Insert minor device id before character received */\r
+ _putc(DEV_S3, 0x1b);\r
+ _putc(DEV_S3, port);\r
+\r
+ /* Escape an ESC in the data stream */\r
+ if (c == 0x1b)\r
+ _putc(DEV_S3, 0x1b);\r
+\r
+ _putc(DEV_S3, c);\r
+ }\r
+\r
+ /* Don't pass on RTC data */\r
+ if (!rtc.seq)\r
+ wsdevs[device->port].saved_rx_vector[1](device, c);\r
}\r
\r
void testsystem_init(void)\r
{\r
-#if 0\r
- int i;\r
+ /*\r
+ * Initialises testsystem\r
+ */\r
+ char p;\r
+\r
+ /* Configures which devices get the testsystem hook installed */\r
+ wsdevs[_2SDEV(DEV_S1)].tsyshook = 1;\r
+ wsdevs[_2SDEV(DEV_LC)].tsyshook = 0;\r
+ wsdevs[_2SDEV(DEV_TS)].tsyshook = 1;\r
+ wsdevs[_2SDEV(DEV_CD)].tsyshook = 1;\r
+ wsdevs[_2SDEV(DEV_TP)].tsyshook = 1;\r
\r
- for (i = 0; i < PORTS; i++)\r
+ K_OS_Disable_Interrupts();\r
+\r
+ for (p = 0; p < PORTS; p++)\r
{\r
- save_rx_vector[i] = sdevs[i].rx_vector;\r
+ /* Skip Serial 3 itself */\r
+ if (p != _2SDEV(DEV_S3))\r
+ {\r
+ /* Install testsystem hook on selected ports */\r
+ if (wsdevs[p].tsyshook)\r
+ {\r
+ if (wsdevs[p].saved_rx_vector[0])\r
+ {\r
+ /* Install behind device special handler */\r
+ wsdevs[p].saved_rx_vector[1] = wsdevs[p].saved_rx_vector[0];\r
+ wsdevs[p].saved_rx_vector[0] = testsystem_rx_hook;\r
+ }\r
+ else\r
+ {\r
+ /* No device special handler */\r
+ wsdevs[p].saved_rx_vector[1] = sdevs[p].rx_vector;\r
+ sdevs[p].rx_vector = testsystem_rx_hook;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ /* Install testsystem RX handler on serial 3 */\r
+ if (wsdevs[p].saved_rx_vector[0])\r
+ {\r
+ /* Install behind device special handler */\r
+ wsdevs[p].saved_rx_vector[1] = wsdevs[p].saved_rx_vector[0];\r
+ wsdevs[p].saved_rx_vector[0] = testsystem_rx_handler;\r
+ }\r
+ else\r
+ {\r
+ /* No device special handler */\r
+ wsdevs[p].saved_rx_vector[1] = sdevs[p].rx_vector;\r
+ sdevs[p].rx_vector = testsystem_rx_handler;\r
+ }\r
+ }\r
}\r
-#endif\r
\r
- /* For now, the test system only operates on the touchscreen */\r
- save_rx_vector[5] = sdevs[5].rx_vector;\r
- sdevs[5].rx_vector = testsystem_rx_hook;\r
+ K_OS_Enable_Interrupts();\r
+ tsys.enabled = 1;\r
\r
- /* And install testsystem rx handler on serial 3 */\r
- save_rx_vector[3] = sdevs[3].rx_vector;\r
- sdevs[3].rx_vector = testsystem_rx_handler;\r
+ kprintf("Test system enabled\n");\r
}\r
\r
+void testsystem_exit(void)\r
+{\r
+ /*\r
+ * Disables the testsystem\r
+ */\r
+ char p;\r
+\r
+ K_OS_Disable_Interrupts();\r
+\r
+ for (p = 0; p < PORTS; p++)\r
+ {\r
+ /* Skip Serial 3 itself */\r
+ if (p != _2SDEV(DEV_S3))\r
+ {\r
+ /* De-install testsystem hook on selected ports */\r
+ if (wsdevs[p].tsyshook)\r
+ {\r
+ if (wsdevs[p].saved_rx_vector[0])\r
+ {\r
+ /* Remove behind device special handler */\r
+ wsdevs[p].saved_rx_vector[0] = wsdevs[p].saved_rx_vector[1];\r
+ }\r
+ else\r
+ {\r
+ /* No device special handler */\r
+ sdevs[p].rx_vector = wsdevs[p].saved_rx_vector[1];\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ /* Remove testsystem RX handler from Serial 3 */\r
+ sdevs[p].rx_vector = wsdevs[p].saved_rx_vector[1];\r
+ }\r
+ }\r
+\r
+ K_OS_Enable_Interrupts();\r
+ tsys.enabled = 0;\r
+\r
+ kprintf("Test system disabled\n");\r
+}\r
\r
/* testsystem.h for uzi180 - testsystem definitions and declarations */\r
\r
-extern void testsystem_init();\r
+typedef struct\r
+{\r
+ unsigned char enabled; /* status of test system */\r
+ unsigned char rtc_rec; /* Internal RTC being recorded */\r
+} tsysT;\r
+\r
+extern tsysT tsys;\r
+\r
+extern void tsys_init();\r
+extern void tsys_exit();\r
\r
#include <config.h>\r
#include <extern.h>\r
#include "devtty.h"\r
-\r
-void sttime(time_t *tvec);\r
-void touchscreen_rx_hook(SDEV *device, char c);\r
-void (*touchscreen_save_rx_vector)(SDEV *device, char c);\r
+#include "devno.h"\r
+#include "touchscreen.h"\r
+#include "testsystem.h"\r
\r
\r
+/* RTC defaults */\r
+rtcT rtc = {\r
+ 0, /* No RTC sequence in progress */\r
+ RTC_INT /* RTC source is internal */\r
+ };\r
\r
void touchscreen_init(void)\r
{\r
- touchscreen_save_rx_vector = sdevs[5].rx_vector;\r
- sdevs[5].rx_vector = touchscreen_rx_hook;\r
+ K_OS_Disable_Interrupts();\r
+\r
+ /* Install touchscreen RX hook */\r
+ wsdevs[_2SDEV(DEV_TS)].saved_rx_vector[0] = sdevs[_2SDEV(DEV_TS)].rx_vector;\r
+ sdevs[_2SDEV(DEV_TS)].rx_vector = touchscreen_rx_hook;\r
+\r
+ K_OS_Enable_Interrupts();\r
}\r
\r
void touchscreen_rx_hook(SDEV *device, char c)\r
- {\r
- static char state = 0;\r
- static unsigned char message[8];\r
+{\r
+ /* Extract RTC data from input stream */\r
+ if (!RTC_extract(c, RTC_INT))\r
+ (*wsdevs[_2SDEV(DEV_TS)].saved_rx_vector[0])(device, c);\r
\r
- message[state] = c;\r
+ /* If the testsystem is recording, pass the RTC data on */\r
+ else if (tsys.rtc_rec)\r
+ (*wsdevs[_2SDEV(DEV_TS)].saved_rx_vector[0])(device, c);\r
+}\r
\r
- switch (state)\r
- {\r
+/*\r
+ * s: RTC source => s == RTC_INT : internal RTC\r
+ * s == RTC_EXT : external RTC\r
+*/\r
+int RTC_extract(char c, char s)\r
+{\r
+\r
+ static unsigned char state[2] = {0, 0};\r
+ static unsigned char message[2][8];\r
+\r
+ message[s][state[s]] = c;\r
+\r
+ switch (state[s])\r
+ {\r
\r
case 0:\r
switch (c)\r
- {\r
+ {\r
\r
case 0x1b:\r
- state++;\r
+ /*\r
+ * There's still a problem with this first ESC:\r
+ * it either IS or IS NOT given to the application\r
+ * depending on how the return code for this\r
+ * first ESC (1) is interpreted. \r
+ */\r
+ state[s]++;\r
+ rtc.seq = 1;\r
break;\r
\r
default:\r
-#if 1\r
- (*touchscreen_save_rx_vector)(device, c);\r
-#else\r
- tty_inproc(2, c);\r
-#endif\r
- break;\r
+ /* Encountered no sequence at all */\r
+ return(0);\r
\r
- }\r
+ }\r
break;\r
\r
case 1:\r
if (c == 'T')\r
- {\r
- state++;\r
- }\r
+ {\r
+ state[s]++;\r
+ }\r
else\r
- {\r
- state = 0;\r
- }\r
+ {\r
+ state[s] = 0;\r
+ rtc.seq = 0;\r
+ /* Unknown ESC sequence */\r
+ return(0);\r
+ }\r
+\r
break;\r
\r
case 2: /* hour */\r
case 4: /* secs */\r
case 5: /* month */\r
case 6: /* day */\r
- state++;\r
+ state[s]++;\r
break;\r
\r
case 7: /* year-1980 */\r
- tod.t_time = ((int)message[4] >> 1) |\r
- ((int)message[3] << 5) |\r
- ((int)message[2] << 11);\r
-\r
- tod.t_date = (int)message[6] |\r
- ((int)message[5] << 5) |\r
- ((int)message[7] << 9);\r
+ if (rtc.source == s)\r
+ {\r
+ tod.t_time = ((int)message[s][4] >> 1) |\r
+ ((int)message[s][3] << 5) |\r
+ ((int)message[s][2] << 11);\r
\r
- state = 0;\r
- break;\r
+ tod.t_date = (int)message[s][6] |\r
+ ((int)message[s][5] << 5) |\r
+ ((int)message[s][7] << 9);\r
}\r
+\r
+ state[s] = 0;\r
+ rtc.seq = 0;\r
+ /* Encountered complete RTC sequence */\r
+ return(2);\r
}\r
\r
+ /* Partial RTC sequence */\r
+ return(1);\r
+}\r
+\r
void sttime(time_t *tvec)\r
- {\r
+{\r
char message[8];\r
\r
message[0] = 0x1b;\r
message[6] = tvec->t_date & 0x1f; /* day */\r
message[7] = (tvec->t_date >> 9) & 0x3f; /* year */\r
\r
- if (K_Put_Str_Wait(5, message, 8, 0x1000) != K_OK)\r
- {\r
+ if (K_Put_Str_Wait(_2SDEV(DEV_TS), message, 8, 0x1000) != K_OK)\r
+ {\r
panic("can't sttime");\r
- }\r
}\r
+}\r
\r
/* touchscreen.h for uzi180 - touchscreen definitions and declarations */\r
\r
+#define RTC_INT 0 /* internal RTC */\r
+#define RTC_EXT 1 /* external RTC */\r
+\r
+typedef struct\r
+{\r
+ unsigned char seq; /* RTC sequence in progress */\r
+ unsigned char source; /* RTC source */\r
+} rtcT;\r
+\r
+extern rtcT rtc;\r
+\r
+extern int RTC_extract(char c, char s);\r
+extern void sttime(time_t *tvec);\r
extern void touchscreen_init(void);\r
+extern void touchscreen_rx_hook(SDEV *device, char c);\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Avr.C\r
+ Parts of this are Copyright (C) 1997-1999 Uros Platise\r
+ The rest of it is Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#include <stdio.h>\r
+#include <string.h> /* Nick */\r
+\r
+#include "Avr.h"\r
+#include "Error.h"\r
+\r
+#define FALSE 0\r
+#define TRUE (!FALSE)\r
+\r
+//#define DEBUG_3\r
+\r
+// The "---" entry at the end is necessary because of the way\r
+// TAvr::Word2Instruction signals the calling function that no matching entry\r
+// was found. It returns 0 to do that. If TAvr::InstSet[] had the "wdr" entry\r
+// just before the NULL entry then an actual "wdr" causes 0 to be returned.\r
+TAvr::TInstSet TAvr::InstSet [] = { \r
+ { "adc", "dr", "000111rdddddrrrr", ARG_0_31, ARG_0_31 }, // rol is a special case of adc\r
+ { "add", "dr", "000011rdddddrrrr", ARG_0_31, ARG_0_31 }, // Complement of lsl\r
+ { "adiw", "dK", "10010110KKddKKKK", ARG_24_26_28_30, ARG_0_63 },\r
+ { "and", "dr", "001000rdddddrrrr", ARG_0_31, ARG_0_31 }, // tst is a special case of and\r
+ { "andi", "dK", "0111KKKKddddKKKK", ARG_16_31, ARG_0_255 }, // Complement of cbr\r
+ { "asr", "d", "1001010ddddd0101", ARG_0_31, ARG_none },\r
+ { "bclr", "s", "100101001sss1000", ARG_0_7, ARG_none }, // clz is a special case of bclr\r
+ { "bld", "db", "1111100ddddd0bbb", ARG_0_31, ARG_0_7 },\r
+ { "brbc", "sk", "111101kkkkkkksss", ARG_0_7, ARG_neg64_63 }, // brge, brid, brpl, brtc is a special case of brbc\r
+ { "brbs", "sk", "111100kkkkkkksss", ARG_0_7, ARG_neg64_63 }, // brcs, breq, brhs, brie, brlo, brlt, brts is a special case of brbs\r
+ { "brcc", "k", "111101kkkkkkk000", ARG_neg64_63, ARG_none },\r
+ { "brcs", "k", "111100kkkkkkk000", ARG_neg64_63, ARG_none }, // brcs is a special case of brbs\r
+ { "breq", "k", "111100kkkkkkk001", ARG_neg64_63, ARG_none }, // breq is a special case of brbs\r
+ { "brge", "k", "111101kkkkkkk100", ARG_neg64_63, ARG_none }, // brge is a special case of brbc\r
+ { "brhc", "k", "111101kkkkkkk101", ARG_neg64_63, ARG_none },\r
+ { "brhs", "k", "111100kkkkkkk101", ARG_neg64_63, ARG_none }, // brhs is a special case of brbs\r
+ { "brid", "k", "111101kkkkkkk111", ARG_neg64_63, ARG_none },\r
+ { "brie", "k", "111100kkkkkkk111", ARG_neg64_63, ARG_none }, // brie is a special case of brbs\r
+ { "brlo", "k", "111100kkkkkkk000", ARG_neg64_63, ARG_none }, // brlo is a special case of brbs\r
+ { "brlt", "k", "111100kkkkkkk100", ARG_neg64_63, ARG_none }, // brlt is a special case of brbs\r
+ { "brmi", "k", "111100kkkkkkk010", ARG_neg64_63, ARG_none },\r
+ { "brne", "k", "111101kkkkkkk001", ARG_neg64_63, ARG_none },\r
+ { "brpl", "k", "111101kkkkkkk010", ARG_neg64_63, ARG_none }, // brpl is a special case of brbc\r
+ { "brsh", "k", "111101kkkkkkk000", ARG_neg64_63, ARG_none },\r
+ { "brtc", "k", "111101kkkkkkk110", ARG_neg64_63, ARG_none }, // brtc is a special case of brbc\r
+ { "brts", "k", "111100kkkkkkk110", ARG_neg64_63, ARG_none }, // brts is a special case of brbs\r
+ { "brvc", "k", "111101kkkkkkk011", ARG_neg64_63, ARG_none },\r
+ { "brvs", "k", "111100kkkkkkk011", ARG_neg64_63, ARG_none },\r
+ { "bset", "s", "100101000sss1000", ARG_0_7, ARG_none },\r
+ { "bst", "db", "1111101ddddd0bbb", ARG_0_31, ARG_0_7 },\r
+// { "call", "k", "1001010kkkkk111k", ARG_longCall, ARG_none }, // from ava: "Instruction not supported by selected model: call"\r
+ { "cbi", "Pb", "10011000PPPPPbbb", ARG_0_31, ARG_0_7 },\r
+ { "cbr", "dK", "0111KKKKddddKKKK", ARG_16_31, ARG_cm0_cm255 }, // Complement of andi (Really Complement)\r
+ { "clc", "", "1001010010001000", ARG_none, ARG_none },\r
+ { "clh", "", "1001010011011000", ARG_none, ARG_none },\r
+ { "cli", "", "1001010011111000", ARG_none, ARG_none },\r
+ { "cln", "", "1001010010101000", ARG_none, ARG_none },\r
+ { "clr", "d", "001001CdddddCCCC", ARG_0_31, ARG_copyArg }, // Complement of eor\r
+ { "cls", "", "1001010011001000", ARG_none, ARG_none },\r
+ { "clt", "", "1001010011101000", ARG_none, ARG_none },\r
+ { "clv", "", "1001010010111000", ARG_none, ARG_none },\r
+ { "clz", "", "1001010010011000", ARG_none, ARG_none }, // clz is a special case of bclr\r
+ { "com", "d", "1001010ddddd0000", ARG_0_31, ARG_none },\r
+ { "cp", "dr", "000101rdddddrrrr", ARG_0_31, ARG_0_31 },\r
+ { "cpc", "dr", "000001rdddddrrrr", ARG_0_31, ARG_0_31 },\r
+ { "cpi", "dK", "0011KKKKddddKKKK", ARG_16_31, ARG_0_255 },\r
+ { "cpse", "dr", "000100rdddddrrrr", ARG_0_31, ARG_0_31 },\r
+ { "dec", "d", "1001010ddddd1010", ARG_0_31, ARG_none },\r
+ { "eor", "dr", "001001rdddddrrrr", ARG_0_31, ARG_0_31 }, // Complement of clr\r
+ { "icall","", "1001010100001001", ARG_none, ARG_none },\r
+ { "ijmp", "", "1001010000001001", ARG_none, ARG_none },\r
+ { "in", "dP", "10110PPdddddPPPP", ARG_0_31, ARG_0_63 },\r
+ { "inc", "d", "1001010ddddd0011", ARG_0_31, ARG_none },\r
+// { "jmp", "k", "1001010kkkkk110k", ARG_longCall, ARG_none }, // from ava: "Instruction not supported by selected model: jmp"\r
+ { "ld", "dX", "1001000ddddd1100", ARG_0_31, ARG_specialX },\r
+ { "ld", "dX", "1001000ddddd1101", ARG_0_31, ARG_specialIncX },\r
+ { "ld", "dX", "1001000ddddd1110", ARG_0_31, ARG_specialDecX },\r
+ { "ld", "dY", "1000000ddddd1000", ARG_0_31, ARG_specialY }, // ld4 is a special case of ldd1\r
+ { "ld", "dY", "1001000ddddd1001", ARG_0_31, ARG_specialIncY },\r
+ { "ld", "dY", "1001000ddddd1010", ARG_0_31, ARG_specialDecY },\r
+ { "ld", "dZ", "1000000ddddd0000", ARG_0_31, ARG_specialZ }, // ld7 is a special case of ldd2\r
+ { "ld", "dZ", "1001000ddddd0001", ARG_0_31, ARG_specialIncZ },\r
+ { "ld", "dZ", "1001000ddddd0010", ARG_0_31, ARG_specialDecZ },\r
+ { "ldd", "dY", "10Y0YY0ddddd1YYY", ARG_0_31, ARG_0_63 },\r
+ { "ldd", "dZ", "10Z0ZZ0ddddd0ZZZ", ARG_0_31, ARG_0_63 },\r
+ { "ldi", "dK", "1110KKKKddddKKKK", ARG_16_31, ARG_0_255 },\r
+ { "lds", "dK", "1001000ddddd0000", ARG_0_31, ARG_longCall },\r
+ { "lpm", "", "1001010111001000", ARG_none, ARG_none },\r
+ { "lsl", "d", "000011CdddddCCCC", ARG_0_31, ARG_copyArg }, // Complement of add\r
+ { "lsr", "d", "1001010ddddd0110", ARG_0_31, ARG_none },\r
+ { "mov", "dr", "001011rdddddrrrr", ARG_0_31, ARG_0_31 },\r
+// { "mul", "dr", "100111rdddddrrrr", ARG_0_31, ARG_0_31 }, // from ava: "Instruction not supported by selected model: mul"\r
+ { "neg", "d", "1001010ddddd0001", ARG_0_31, ARG_none },\r
+ { "nop", "", "0000000000000000", ARG_none, ARG_none },\r
+ { "or", "dr", "001010rdddddrrrr", ARG_0_31, ARG_0_31 },\r
+ { "ori", "dK", "0110KKKKddddKKKK", ARG_16_31, ARG_0_255 }, // Complement of sbr\r
+ { "out", "Pr", "10111PPrrrrrPPPP", ARG_0_63, ARG_0_31 },\r
+ { "pop", "d", "1001000ddddd1111", ARG_0_31, ARG_none },\r
+ { "push", "d", "1001001ddddd1111", ARG_0_31, ARG_none },\r
+ { "rcall","k", "1101kkkkkkkkkkkk", ARG_neg2KB_2KB, ARG_none },\r
+ { "ret", "", "1001010100001000", ARG_none, ARG_none },\r
+ { "reti", "", "1001010100011000", ARG_none, ARG_none },\r
+ { "rjmp", "k", "1100kkkkkkkkkkkk", ARG_neg2KB_2KB, ARG_none },\r
+ { "rol", "d", "000111CdddddCCCC", ARG_0_31, ARG_copyArg }, // rol is a special case of adc\r
+ { "ror", "d", "1001010ddddd0111", ARG_0_31, ARG_none },\r
+ { "sbc", "dr", "000010rdddddrrrr", ARG_0_31, ARG_0_31 },\r
+ { "sbci", "dK", "0100KKKKddddKKKK", ARG_16_31, ARG_0_255 },\r
+ { "sbi", "pb", "10011010pppppbbb", ARG_0_31, ARG_0_7 },\r
+ { "sbic", "pb", "10011001pppppbbb", ARG_0_31, ARG_0_7 },\r
+ { "sbis", "pb", "10011011pppppbbb", ARG_0_31, ARG_0_7 },\r
+ { "sbiw", "dK", "10010111KKddKKKK", ARG_24_26_28_30, ARG_0_63 },\r
+ { "sbr", "dK", "0110KKKKddddKKKK", ARG_16_31, ARG_0_255 }, // Complement of ori\r
+ { "sbrc", "rb", "1111110rrrrr0bbb", ARG_0_31, ARG_0_7 },\r
+ { "sbrs", "rb", "1111111rrrrr0bbb", ARG_0_31, ARG_0_7 },\r
+ { "sec", "", "1001010000001000", ARG_none, ARG_none },\r
+ { "seh", "", "1001010001011000", ARG_none, ARG_none },\r
+ { "sei", "", "1001010001111000", ARG_none, ARG_none },\r
+ { "sen", "", "1001010000101000", ARG_none, ARG_none },\r
+ { "ser", "d", "11101111dddd1111", ARG_16_31, ARG_none },\r
+ { "ses", "", "1001010001001000", ARG_none, ARG_none },\r
+ { "set", "", "1001010001101000", ARG_none, ARG_none },\r
+ { "sev", "", "1001010000111000", ARG_none, ARG_none },\r
+ { "sez", "", "1001010000011000", ARG_none, ARG_none },\r
+ { "sleep","", "1001010110001000", ARG_none, ARG_none },\r
+ { "st", "Xr", "1001001rrrrr1100", ARG_specialX, ARG_0_31 }, /*DO NOT CHANGE THE ORDER!*/\r
+ { "st", "Xr", "1001001rrrrr1101", ARG_specialIncX, ARG_0_31 },\r
+ { "st", "Xr", "1001001rrrrr1110", ARG_specialDecX, ARG_0_31 },\r
+ { "st", "Yr", "1000001rrrrr1000", ARG_specialY, ARG_0_31 }, // st4 is a special case of std1\r
+ { "st", "Yr", "1001001rrrrr1001", ARG_specialIncY, ARG_0_31 },\r
+ { "st", "Yr", "1001001rrrrr1010", ARG_specialDecY, ARG_0_31 },\r
+ { "st", "Zr", "1000001rrrrr0000", ARG_specialZ, ARG_0_31 }, // st7 is a special case of std2\r
+ { "st", "Zr", "1001001rrrrr0001", ARG_specialIncZ, ARG_0_31 },\r
+ { "st", "Zr", "1001001rrrrr0010", ARG_specialDecZ, ARG_0_31 }, \r
+ { "std", "Yr", "10Y0YY1rrrrr1YYY", ARG_0_63, ARG_0_31 }, // st4 is a special case of std1\r
+ { "std", "Zr", "10Z0ZZ1rrrrr0ZZZ", ARG_0_63, ARG_0_31 }, // st7 is a special case of std2\r
+ { "sts", "Kd", "1001001ddddd0000", ARG_longCall, ARG_0_31 },\r
+ { "sub", "dr", "000110rdddddrrrr", ARG_0_31, ARG_0_31 },\r
+ { "subi", "dK", "0101KKKKddddKKKK", ARG_16_31, ARG_0_255 },\r
+ { "swap", "d", "1001010ddddd0010", ARG_0_31, ARG_none },\r
+ { "tst", "d", "001000CdddddCCCC", ARG_0_31, ARG_copyArg }, // tst is a special case of and\r
+ { "wdr", "", "1001010110101000", ARG_none, ARG_none },\r
+ { "---", "", "", ARG_none, ARG_none },\r
+ { "", "", "", ARG_none, ARG_none }\r
+};\r
+\r
+int TAvr::Word2Instruction(\r
+ TInstruction* pInstruction,\r
+ unsigned short code_word,\r
+ int index ){\r
+\r
+ TInstSet* pInstSet;\r
+ int match;\r
+ unsigned short mask;\r
+ unsigned short mask0;\r
+ unsigned short mask1;\r
+ unsigned short maskC;\r
+ int haveC;\r
+ unsigned short arg0 = 0;\r
+ unsigned short arg1 = 0;\r
+ unsigned short argC = 0;\r
+ char* pc;\r
+\r
+ #ifdef DEBUG\r
+ printf( "DEBUG - Word2Instruction: Entering Function With index = %d\n", index );\r
+ #endif\r
+\r
+ // Look through the instruction set starting at index until we find a\r
+ // pInstSet->opcode[] that matches with our code_word. Return\r
+ // ( index + 1 ) of the Instruction found, or return 0 if there was\r
+ // no matching instruction between index passed in and the end of the\r
+ // array.\r
+\r
+ if( index < 0 ||\r
+ index >= (int)( sizeof( InstSet ) / sizeof( InstSet[ 0 ] ))){\r
+\r
+ char msg[ 80 ]; // FIXME - Magic Number\r
+ sprintf( msg, "Word2Instruction: illegal index: %d\n", index );\r
+ throw TGenericError( msg ); \r
+ }\r
+\r
+ pInstSet = &InstSet[ index ];\r
+ match = FALSE;\r
+ while( !match && '\0' != pInstSet->name[ 0 ] ){\r
+\r
+ // Kludgy fix for the kludgy "---" instruction thing. We have to\r
+ // increment pInstSet and bust out of this loop to avoid matching on\r
+ // "---".\r
+ if( 0 == strcmp( "---", pInstSet->name ) ){\r
+ pInstSet++;\r
+ break;\r
+ }\r
+\r
+ haveC = FALSE;\r
+\r
+ match = TRUE;\r
+ pc = pInstSet->opcode;\r
+ mask = 0x8000;\r
+ while( *pc ){\r
+\r
+ if( '0' == *pc ){\r
+ // Current bit of opcode is a 0\r
+ if( code_word & mask ){\r
+ // Current bit of code_word is a 1\r
+ match = FALSE;\r
+ break;\r
+ }\r
+ } else if( '1' == *pc ){\r
+ // Current bit of opcode is a 1\r
+ if( !( code_word & mask ) ){\r
+ // Current bit of code_word is a 0\r
+ match = FALSE;\r
+ break;\r
+ }\r
+ }\r
+\r
+ // Go to the next bit\r
+ pc++;\r
+ mask >>= 1;\r
+ }\r
+\r
+ if( match ){\r
+\r
+ #ifdef DEBUG\r
+ printf( "DEBUG - Word2Instruction: We Have A Match at index = %d\n", index );\r
+ #endif\r
+\r
+ strcpy( pInstruction->name, pInstSet->name );\r
+ pInstruction->arg0_format = pInstSet->arg[ 0 ];\r
+ pInstruction->arg1_format = pInstSet->arg[ 1 ];\r
+ pInstruction->arg0_type = pInstSet->arg0_type;\r
+ pInstruction->arg1_type = pInstSet->arg1_type;\r
+\r
+ #ifdef DEBUG_2\r
+ printf( "pInstSet->name = %s\n", pInstSet->name );\r
+ printf( "pInstSet->opcode = %s\n", pInstSet->opcode );\r
+ printf( "pInstSet->arg[ 0 ] = '%c'\n", pInstSet->arg[ 0 ] );\r
+ printf( "pInstSet->arg[ 1 ] = '%c'\n", pInstSet->arg[ 1 ] );\r
+ #endif\r
+\r
+ // The args are hard to get out of the code_word. We will use a\r
+ // process borrowed from above. One big difference though is that\r
+ // here we start on the least significant bit.\r
+ pc = pInstSet->opcode + 15;\r
+ mask = 0x0001;\r
+ arg0 = 0;\r
+ arg1 = 0;\r
+ argC = 0;\r
+ mask0 = 0x0001;\r
+ mask1 = 0x0001;\r
+ maskC = 0x0001;\r
+ while( pc >= pInstSet->opcode ){\r
+\r
+ #ifdef DEBUG_2\r
+ printf( "*pc = %c\n", *pc );\r
+ printf( "mask = 0x%04X\n", mask );\r
+ printf( "arg0 = 0x%04X\n", arg0 );\r
+ printf( "arg1 = 0x%04X\n", arg1 );\r
+ printf( "argC = 0x%04X\n", argC );\r
+ printf( "mask0 = 0x%04X\n", mask0 );\r
+ printf( "mask1 = 0x%04X\n", mask1 );\r
+ printf( "maskC = 0x%04X\n", maskC );\r
+ #endif\r
+\r
+ if( ARG_none != pInstSet->arg0_type && pInstSet->arg[ 0 ] == *pc ){\r
+\r
+ // Current bit of opcode is current bit of arg0\r
+ if( code_word & mask ){\r
+ arg0 |= mask0;\r
+ }\r
+\r
+ mask0 <<= 1;\r
+\r
+ } else if( ARG_none != pInstSet->arg1_type && pInstSet->arg[ 1 ] == *pc ){\r
+\r
+ // Current bit of opcode is current bit of arg1\r
+ if( code_word & mask ){\r
+ arg1 |= mask1;\r
+ }\r
+\r
+ mask1 <<= 1;\r
+ } else if( 'C' == *pc ){\r
+\r
+ // We have to test and see if C equals arg[ 0 ]\r
+ if( code_word & mask ){\r
+ argC |= maskC;\r
+ }\r
+\r
+ haveC = TRUE;\r
+ maskC <<= 1;\r
+ }\r
+\r
+ // Go to the next higher bit in the opcode\r
+ mask <<= 1;\r
+ pc--;\r
+ }\r
+\r
+ pInstruction->arg0 = AdjustArg( arg0, pInstSet->arg0_type );\r
+ pInstruction->arg1 = AdjustArg( arg1, pInstSet->arg1_type );\r
+\r
+ // If we're trying for a C equals arg[ 0 ] instruction this will\r
+ // correctly set match\r
+ match = !( haveC ) || ( argC == arg0 );\r
+ }\r
+\r
+ pInstSet++;\r
+ index++;\r
+ }\r
+\r
+ if( '\0' == pInstSet->name[ 0 ] )\r
+ index = 0;\r
+\r
+ #ifdef DEBUG_3\r
+ printf( "DEBUG - Word2Instruction Ending with index = %d\n", index );\r
+ printf( "DEBUG - pInstruction->name = %s\n", pInstruction->name );\r
+ printf( "DEBUG - pInstruction->arg0_format = '%c'\n", pInstruction->arg0_format );\r
+ printf( "DEBUG - pInstruction->arg1_format = '%c'\n", pInstruction->arg1_format );\r
+ printf( "DEBUG - pInstruction->arg0_type = %d\n", pInstruction->arg0_type );\r
+ printf( "DEBUG - pInstruction->arg1_type = %d\n", pInstruction->arg1_type );\r
+ printf( "DEBUG - pInstruction->arg0 = 0x%02X\n", pInstruction->arg0 );\r
+ printf( "DEBUG - pInstruction->arg1 = 0x%02X\n", pInstruction->arg1 );\r
+ #endif\r
+\r
+ return( index );\r
+}\r
+\r
+unsigned short TAvr::AdjustArg( unsigned short arg, eArgTypes eArgType ){\r
+\r
+ switch( eArgType ){\r
+\r
+ case ARG_16_31:\r
+ arg += 16;\r
+ break;\r
+\r
+ case ARG_neg64_63:\r
+\r
+ // Take times 2 (because in the assembler source\r
+ // "brbc 0, -1" and "brbc 0, -2" are the same thing),\r
+ // and then sign extend it.\r
+ arg <<= 1;\r
+\r
+ if( 0x80 & arg )\r
+ arg |= 0xFF00;\r
+\r
+ break;\r
+\r
+ case ARG_cm0_cm255:\r
+ // complement bits\r
+ break;\r
+\r
+ case ARG_neg2KB_2KB:\r
+\r
+ // Take times 2 (because in the assembler source\r
+ // "rcall 2" and "rcall 3" are the same thing),\r
+ // and then sign extend it.\r
+ arg <<= 1;\r
+\r
+ if( 0x1000 & arg )\r
+ arg |= 0xF000;\r
+\r
+ break;\r
+\r
+ case ARG_24_26_28_30:\r
+ // 0 => 24\r
+ // 1 => 26\r
+ // 2 => 28\r
+ // 3 => 30\r
+ arg = 2 * ( arg + 12 );\r
+ break;\r
+\r
+ case ARG_specialX:\r
+ case ARG_specialY:\r
+ case ARG_specialZ:\r
+ arg = (unsigned short)' ';\r
+ break;\r
+\r
+ case ARG_specialIncX:\r
+ case ARG_specialIncY:\r
+ case ARG_specialIncZ:\r
+ arg = (unsigned short)'+';\r
+ break;\r
+\r
+ case ARG_specialDecX:\r
+ case ARG_specialDecY:\r
+ case ARG_specialDecZ:\r
+ arg = (unsigned short)'-';\r
+ break;\r
+\r
+\r
+ case ARG_none:\r
+ case ARG_0_31:\r
+ case ARG_0_7:\r
+ case ARG_0_63:\r
+ case ARG_0_255:\r
+ case ARG_longCall:\r
+ case ARG_copyArg:\r
+ // Do nothing\r
+ break;\r
+\r
+ default: {\r
+\r
+ char msg[ 80 ]; // FIXME - Magic Number\r
+ sprintf( msg, "AdjustArg: Unhandled Arg Type: %d\n", eArgType );\r
+ throw TGenericError( msg ); \r
+ \r
+ break;\r
+ }\r
+ }\r
+\r
+ return arg;\r
+}\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Avr.h\r
+ Parts of this are Copyright (C) 1997-1999 Uros Platise\r
+ The rest of it is Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#ifndef __AVR\r
+#define __AVR\r
+\r
+class TAvr{\r
+\r
+ public:\r
+\r
+ enum eArgTypes {\r
+ ARG_none,\r
+ ARG_0_31, /* registers and constants */\r
+ ARG_0_7,\r
+ ARG_0_63,\r
+ ARG_16_31, /* registers only */\r
+ ARG_0_255,\r
+ ARG_neg64_63,\r
+ ARG_cm0_cm255, /* complement bits */\r
+ ARG_neg2KB_2KB,\r
+ ARG_24_26_28_30,\r
+ ARG_longCall,\r
+ ARG_copyArg,\r
+ ARG_specialX,\r
+ ARG_specialIncX,\r
+ ARG_specialDecX,\r
+ ARG_specialY,\r
+ ARG_specialIncY,\r
+ ARG_specialDecY,\r
+ ARG_specialZ,\r
+ ARG_specialIncZ,\r
+ ARG_specialDecZ\r
+ };\r
+\r
+ // It was actually kind of dumb to make this structure since by the\r
+ // time I was done I basically just copied most of TInstSet to this.\r
+ struct TInstruction {\r
+ char name[ 6 ];\r
+ char arg0_format;\r
+ char arg1_format;\r
+ eArgTypes arg0_type;\r
+ eArgTypes arg1_type;\r
+ unsigned short arg0;\r
+ unsigned short arg1;\r
+ };\r
+\r
+ TAvr (){}\r
+ ~TAvr (){}\r
+\r
+ int TAvr::Word2Instruction(\r
+ TInstruction* pInstruction,\r
+ unsigned short code_word,\r
+ int index );\r
+\r
+ private:\r
+\r
+ unsigned short AdjustArg( unsigned short arg, eArgTypes eArgType );\r
+\r
+ // protected, not private, so make_test_source can use it.\r
+ protected:\r
+\r
+ struct TInstSet { /* instruction entry */\r
+ char name[ 6 ];\r
+ char arg[ 4 ];\r
+ char opcode[ 17 ];\r
+ eArgTypes arg0_type;\r
+ eArgTypes arg1_type;\r
+ }; \r
+\r
+ static TInstSet InstSet [];\r
+};\r
+\r
+#endif\r
--- /dev/null
+RELEASE: revava-0.2, 5-Mar-2001\r
+CHANGES: First Official Release\r
+\r
+RELEASE: revava-0.3, xx-xxx-xxxx\r
+CHANGES: Bug_0001 Fixed.\r
+ make_labels.pl included in the release.\r
+ website address added to README.\r
+\r
+Bug_0001 Description:\r
+\r
+When decoding a double word instruction revava gets the address wrong in\r
+the address wrong in the comment field. For instance, here is a listing\r
+of an assembled revava output:\r
+\r
+ 0510: E6A0 ; ldi r26, 0x60 ; 0510\r
+ 0512: 93B00143\r
+ ; sts 0x0143, r27 ; 0514\r
+ 0516: 93A00142\r
+ ; sts 0x0142, r26 ; 0518\r
+ 051A: EA0F ; ldi r16, 0xAF ; 051A\r
+\r
+You can see the "sts" instructions are double word instructions and the\r
+assembler lists the address of the first word as the address of the\r
+instruction while revava lists the address of the second word as the\r
+address of the instruction. This was discovered when writing\r
+make_labels.pl. Listing the address of the first word seems more\r
+correct and will make make_labels.pl work right, so I'm calling this a\r
+revava bug.\r
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE\r
+ Version 2, June 1991\r
+\r
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.\r
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+ Preamble\r
+\r
+ The licenses for most software are designed to take away your\r
+freedom to share and change it. By contrast, the GNU General Public\r
+License is intended to guarantee your freedom to share and change free\r
+software--to make sure the software is free for all its users. This\r
+General Public License applies to most of the Free Software\r
+Foundation's software and to any other program whose authors commit to\r
+using it. (Some other Free Software Foundation software is covered by\r
+the GNU Library General Public License instead.) You can apply it to\r
+your programs, too.\r
+\r
+ When we speak of free software, we are referring to freedom, not\r
+price. Our General Public Licenses are designed to make sure that you\r
+have the freedom to distribute copies of free software (and charge for\r
+this service if you wish), that you receive source code or can get it\r
+if you want it, that you can change the software or use pieces of it\r
+in new free programs; and that you know you can do these things.\r
+\r
+ To protect your rights, we need to make restrictions that forbid\r
+anyone to deny you these rights or to ask you to surrender the rights.\r
+These restrictions translate to certain responsibilities for you if you\r
+distribute copies of the software, or if you modify it.\r
+\r
+ For example, if you distribute copies of such a program, whether\r
+gratis or for a fee, you must give the recipients all the rights that\r
+you have. You must make sure that they, too, receive or can get the\r
+source code. And you must show them these terms so they know their\r
+rights.\r
+\r
+ We protect your rights with two steps: (1) copyright the software, and\r
+(2) offer you this license which gives you legal permission to copy,\r
+distribute and/or modify the software.\r
+\r
+ Also, for each author's protection and ours, we want to make certain\r
+that everyone understands that there is no warranty for this free\r
+software. If the software is modified by someone else and passed on, we\r
+want its recipients to know that what they have is not the original, so\r
+that any problems introduced by others will not reflect on the original\r
+authors' reputations.\r
+\r
+ Finally, any free program is threatened constantly by software\r
+patents. We wish to avoid the danger that redistributors of a free\r
+program will individually obtain patent licenses, in effect making the\r
+program proprietary. To prevent this, we have made it clear that any\r
+patent must be licensed for everyone's free use or not licensed at all.\r
+\r
+ The precise terms and conditions for copying, distribution and\r
+modification follow.\r
+\f\r
+ GNU GENERAL PUBLIC LICENSE\r
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
+\r
+ 0. This License applies to any program or other work which contains\r
+a notice placed by the copyright holder saying it may be distributed\r
+under the terms of this General Public License. The "Program", below,\r
+refers to any such program or work, and a "work based on the Program"\r
+means either the Program or any derivative work under copyright law:\r
+that is to say, a work containing the Program or a portion of it,\r
+either verbatim or with modifications and/or translated into another\r
+language. (Hereinafter, translation is included without limitation in\r
+the term "modification".) Each licensee is addressed as "you".\r
+\r
+Activities other than copying, distribution and modification are not\r
+covered by this License; they are outside its scope. The act of\r
+running the Program is not restricted, and the output from the Program\r
+is covered only if its contents constitute a work based on the\r
+Program (independent of having been made by running the Program).\r
+Whether that is true depends on what the Program does.\r
+\r
+ 1. You may copy and distribute verbatim copies of the Program's\r
+source code as you receive it, in any medium, provided that you\r
+conspicuously and appropriately publish on each copy an appropriate\r
+copyright notice and disclaimer of warranty; keep intact all the\r
+notices that refer to this License and to the absence of any warranty;\r
+and give any other recipients of the Program a copy of this License\r
+along with the Program.\r
+\r
+You may charge a fee for the physical act of transferring a copy, and\r
+you may at your option offer warranty protection in exchange for a fee.\r
+\r
+ 2. You may modify your copy or copies of the Program or any portion\r
+of it, thus forming a work based on the Program, and copy and\r
+distribute such modifications or work under the terms of Section 1\r
+above, provided that you also meet all of these conditions:\r
+\r
+ a) You must cause the modified files to carry prominent notices\r
+ stating that you changed the files and the date of any change.\r
+\r
+ b) You must cause any work that you distribute or publish, that in\r
+ whole or in part contains or is derived from the Program or any\r
+ part thereof, to be licensed as a whole at no charge to all third\r
+ parties under the terms of this License.\r
+\r
+ c) If the modified program normally reads commands interactively\r
+ when run, you must cause it, when started running for such\r
+ interactive use in the most ordinary way, to print or display an\r
+ announcement including an appropriate copyright notice and a\r
+ notice that there is no warranty (or else, saying that you provide\r
+ a warranty) and that users may redistribute the program under\r
+ these conditions, and telling the user how to view a copy of this\r
+ License. (Exception: if the Program itself is interactive but\r
+ does not normally print such an announcement, your work based on\r
+ the Program is not required to print an announcement.)\r
+\f\r
+These requirements apply to the modified work as a whole. If\r
+identifiable sections of that work are not derived from the Program,\r
+and can be reasonably considered independent and separate works in\r
+themselves, then this License, and its terms, do not apply to those\r
+sections when you distribute them as separate works. But when you\r
+distribute the same sections as part of a whole which is a work based\r
+on the Program, the distribution of the whole must be on the terms of\r
+this License, whose permissions for other licensees extend to the\r
+entire whole, and thus to each and every part regardless of who wrote it.\r
+\r
+Thus, it is not the intent of this section to claim rights or contest\r
+your rights to work written entirely by you; rather, the intent is to\r
+exercise the right to control the distribution of derivative or\r
+collective works based on the Program.\r
+\r
+In addition, mere aggregation of another work not based on the Program\r
+with the Program (or with a work based on the Program) on a volume of\r
+a storage or distribution medium does not bring the other work under\r
+the scope of this License.\r
+\r
+ 3. You may copy and distribute the Program (or a work based on it,\r
+under Section 2) in object code or executable form under the terms of\r
+Sections 1 and 2 above provided that you also do one of the following:\r
+\r
+ a) Accompany it with the complete corresponding machine-readable\r
+ source code, which must be distributed under the terms of Sections\r
+ 1 and 2 above on a medium customarily used for software interchange; or,\r
+\r
+ b) Accompany it with a written offer, valid for at least three\r
+ years, to give any third party, for a charge no more than your\r
+ cost of physically performing source distribution, a complete\r
+ machine-readable copy of the corresponding source code, to be\r
+ distributed under the terms of Sections 1 and 2 above on a medium\r
+ customarily used for software interchange; or,\r
+\r
+ c) Accompany it with the information you received as to the offer\r
+ to distribute corresponding source code. (This alternative is\r
+ allowed only for noncommercial distribution and only if you\r
+ received the program in object code or executable form with such\r
+ an offer, in accord with Subsection b above.)\r
+\r
+The source code for a work means the preferred form of the work for\r
+making modifications to it. For an executable work, complete source\r
+code means all the source code for all modules it contains, plus any\r
+associated interface definition files, plus the scripts used to\r
+control compilation and installation of the executable. However, as a\r
+special exception, the source code distributed need not include\r
+anything that is normally distributed (in either source or binary\r
+form) with the major components (compiler, kernel, and so on) of the\r
+operating system on which the executable runs, unless that component\r
+itself accompanies the executable.\r
+\r
+If distribution of executable or object code is made by offering\r
+access to copy from a designated place, then offering equivalent\r
+access to copy the source code from the same place counts as\r
+distribution of the source code, even though third parties are not\r
+compelled to copy the source along with the object code.\r
+\f\r
+ 4. You may not copy, modify, sublicense, or distribute the Program\r
+except as expressly provided under this License. Any attempt\r
+otherwise to copy, modify, sublicense or distribute the Program is\r
+void, and will automatically terminate your rights under this License.\r
+However, parties who have received copies, or rights, from you under\r
+this License will not have their licenses terminated so long as such\r
+parties remain in full compliance.\r
+\r
+ 5. You are not required to accept this License, since you have not\r
+signed it. However, nothing else grants you permission to modify or\r
+distribute the Program or its derivative works. These actions are\r
+prohibited by law if you do not accept this License. Therefore, by\r
+modifying or distributing the Program (or any work based on the\r
+Program), you indicate your acceptance of this License to do so, and\r
+all its terms and conditions for copying, distributing or modifying\r
+the Program or works based on it.\r
+\r
+ 6. Each time you redistribute the Program (or any work based on the\r
+Program), the recipient automatically receives a license from the\r
+original licensor to copy, distribute or modify the Program subject to\r
+these terms and conditions. You may not impose any further\r
+restrictions on the recipients' exercise of the rights granted herein.\r
+You are not responsible for enforcing compliance by third parties to\r
+this License.\r
+\r
+ 7. If, as a consequence of a court judgment or allegation of patent\r
+infringement or for any other reason (not limited to patent issues),\r
+conditions are imposed on you (whether by court order, agreement or\r
+otherwise) that contradict the conditions of this License, they do not\r
+excuse you from the conditions of this License. If you cannot\r
+distribute so as to satisfy simultaneously your obligations under this\r
+License and any other pertinent obligations, then as a consequence you\r
+may not distribute the Program at all. For example, if a patent\r
+license would not permit royalty-free redistribution of the Program by\r
+all those who receive copies directly or indirectly through you, then\r
+the only way you could satisfy both it and this License would be to\r
+refrain entirely from distribution of the Program.\r
+\r
+If any portion of this section is held invalid or unenforceable under\r
+any particular circumstance, the balance of the section is intended to\r
+apply and the section as a whole is intended to apply in other\r
+circumstances.\r
+\r
+It is not the purpose of this section to induce you to infringe any\r
+patents or other property right claims or to contest validity of any\r
+such claims; this section has the sole purpose of protecting the\r
+integrity of the free software distribution system, which is\r
+implemented by public license practices. Many people have made\r
+generous contributions to the wide range of software distributed\r
+through that system in reliance on consistent application of that\r
+system; it is up to the author/donor to decide if he or she is willing\r
+to distribute software through any other system and a licensee cannot\r
+impose that choice.\r
+\r
+This section is intended to make thoroughly clear what is believed to\r
+be a consequence of the rest of this License.\r
+\f\r
+ 8. If the distribution and/or use of the Program is restricted in\r
+certain countries either by patents or by copyrighted interfaces, the\r
+original copyright holder who places the Program under this License\r
+may add an explicit geographical distribution limitation excluding\r
+those countries, so that distribution is permitted only in or among\r
+countries not thus excluded. In such case, this License incorporates\r
+the limitation as if written in the body of this License.\r
+\r
+ 9. The Free Software Foundation may publish revised and/or new versions\r
+of the General Public License from time to time. Such new versions will\r
+be similar in spirit to the present version, but may differ in detail to\r
+address new problems or concerns.\r
+\r
+Each version is given a distinguishing version number. If the Program\r
+specifies a version number of this License which applies to it and "any\r
+later version", you have the option of following the terms and conditions\r
+either of that version or of any later version published by the Free\r
+Software Foundation. If the Program does not specify a version number of\r
+this License, you may choose any version ever published by the Free Software\r
+Foundation.\r
+\r
+ 10. If you wish to incorporate parts of the Program into other free\r
+programs whose distribution conditions are different, write to the author\r
+to ask for permission. For software which is copyrighted by the Free\r
+Software Foundation, write to the Free Software Foundation; we sometimes\r
+make exceptions for this. Our decision will be guided by the two goals\r
+of preserving the free status of all derivatives of our free software and\r
+of promoting the sharing and reuse of software generally.\r
+\r
+ NO WARRANTY\r
+\r
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\r
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\r
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\r
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\r
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\r
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\r
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\r
+REPAIR OR CORRECTION.\r
+\r
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\r
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\r
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\r
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\r
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\r
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\r
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\r
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\r
+POSSIBILITY OF SUCH DAMAGES.\r
+\r
+ END OF TERMS AND CONDITIONS\r
+\f\r
+ How to Apply These Terms to Your New Programs\r
+\r
+ If you develop a new program, and you want it to be of the greatest\r
+possible use to the public, the best way to achieve this is to make it\r
+free software which everyone can redistribute and change under these terms.\r
+\r
+ To do so, attach the following notices to the program. It is safest\r
+to attach them to the start of each source file to most effectively\r
+convey the exclusion of warranty; and each file should have at least\r
+the "copyright" line and a pointer to where the full notice is found.\r
+\r
+ <one line to give the program's name and a brief idea of what it does.>\r
+ Copyright (C) <year> <name of author>\r
+\r
+ This program is free software; you can redistribute it and/or modify\r
+ it under the terms of the GNU General Public License as published by\r
+ the Free Software Foundation; either version 2 of the License, or\r
+ (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+\r
+\r
+Also add information on how to contact you by electronic and paper mail.\r
+\r
+If the program is interactive, make it output a short notice like this\r
+when it starts in an interactive mode:\r
+\r
+ Gnomovision version 69, Copyright (C) year name of author\r
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\r
+ This is free software, and you are welcome to redistribute it\r
+ under certain conditions; type `show c' for details.\r
+\r
+The hypothetical commands `show w' and `show c' should show the appropriate\r
+parts of the General Public License. Of course, the commands you use may\r
+be called something other than `show w' and `show c'; they could even be\r
+mouse-clicks or menu items--whatever suits your program.\r
+\r
+You should also get your employer (if you work as a programmer) or your\r
+school, if any, to sign a "copyright disclaimer" for the program, if\r
+necessary. Here is a sample; alter the names:\r
+\r
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program\r
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.\r
+\r
+ <signature of Ty Coon>, 1 April 1989\r
+ Ty Coon, President of Vice\r
+\r
+This General Public License does not permit incorporating your program into\r
+proprietary programs. If your program is a subroutine library, you may\r
+consider it more useful to permit linking proprietary applications with the\r
+library. If this is what you want to do, use the GNU Library General\r
+Public License instead of this License.\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Error.h\r
+ Parts of this are Copyright (C) 1997-1999 Uros Platise\r
+ The rest of it is Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#ifndef __ERROR\r
+#define __ERROR\r
+\r
+#include <stdio.h>\r
+\r
+/* Global Error Class - Abstract Type */\r
+class TGlobalError{\r
+ public:\r
+ TGlobalError(){}\r
+ virtual ~TGlobalError(){}\r
+ virtual void report(FILE* fd=stderr) = 0;\r
+};\r
+\r
+/* Generic Error Class */\r
+class TGenericError : public TGlobalError{\r
+ public:\r
+ TGenericError(const char* msg){\r
+ strcpy( errmsg, msg );\r
+ op[0] = '\0';\r
+ }\r
+\r
+ TGenericError(const char* msg, const char* _op){\r
+ strcpy( errmsg, msg );\r
+ strcpy( op, _op );\r
+ }\r
+\r
+ ~TGenericError(){}\r
+\r
+ void report(FILE* fd=stderr){\r
+ if( op[0] == '\0' ){\r
+ fprintf (fd, "Fatal Error: %s\n", errmsg);\r
+ } else {\r
+ fprintf (fd, "Fatal Error: %s: %s\n", errmsg, op);\r
+ }\r
+ }\r
+\r
+ void prepend_message( const char* msg ){\r
+ char temp[256];\r
+ sprintf( temp, "%s%s", msg, errmsg );\r
+ strcpy( errmsg, temp );\r
+ }\r
+\r
+// void append_message( const char* msg ){\r
+// sprintf( errmsg, "%s%s", errmsg, msg );\r
+// }\r
+\r
+ private:\r
+ char errmsg[256];\r
+ char op[256];\r
+};\r
+\r
+/* File Error Class */\r
+class TFileError: public TGlobalError{\r
+ public:\r
+ TFileError(const char *msg, const char* _op=NULL){\r
+ errmsg = msg;\r
+ op = _op;\r
+ }\r
+\r
+ void report(FILE* fd=stderr){\r
+\r
+ if ( op == NULL ){\r
+ fprintf ( fd, "Fatal Error: %s, ", errmsg);\r
+ } else {\r
+ fprintf( fd, "Fatal Error:%s %s, ", errmsg, op);\r
+ }\r
+\r
+ perror( "" );\r
+ }\r
+\r
+ ~TFileError (){}\r
+\r
+ private:\r
+ const char* errmsg;\r
+ const char* op;\r
+};\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Flash.C, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#include <string.h>\r
+#include "Error.h"\r
+#include "Flash.h"\r
+\r
+#define FALSE 0\r
+#define TRUE (!FALSE)\r
+\r
+TFlash::TFlash(){\r
+ // Clear the Arrays because I don't remember what the rules of\r
+ // C++ are on this.\r
+ memset( (void *)code_space, 0, sizeof( code_space ));\r
+ memset( (void *)code_byte_written, 0, sizeof( code_byte_written ));\r
+}\r
+\r
+void TFlash::FlipEndian( void ){\r
+ int i;\r
+ unsigned char temp;\r
+\r
+ for( i = 0; i < FLASH_SIZE; i += 2 ){\r
+ temp = code_space[ i ];\r
+ code_space[ i ] = code_space[ i + 1 ] ;\r
+ code_space[ i + 1 ] = temp;\r
+ }\r
+}\r
+\r
+void TFlash::flashset(\r
+ unsigned short addr,\r
+ unsigned char nbytes,\r
+ const unsigned char* data){\r
+\r
+ int* pi;\r
+ unsigned char* pc;\r
+\r
+ pi = code_byte_written + addr;\r
+ pc = code_space + addr;\r
+\r
+ // Check boundries\r
+ if(( addr + nbytes ) > FLASH_SIZE ){\r
+ char msg[ 80 ]; // FIXME - Magic Number\r
+ sprintf(\r
+ msg,\r
+ "Address: %04X, Offset: %02X exceeds FLASH_SIZE: %04X", \r
+ addr, nbytes - 1, FLASH_SIZE);\r
+ throw TGenericError( msg ); \r
+ }\r
+ \r
+ while( nbytes-- ){\r
+ // Increment counter for this byte, then increment the pointer\r
+ // to the byte counter.\r
+ ++( *( pi++ ) );\r
+\r
+ *pc++ = *data++;\r
+ }\r
+}\r
+\r
+unsigned short TFlash::get_flash_word(\r
+ unsigned short addr,\r
+ int* high_byte_written,\r
+ int* low_byte_written ){\r
+\r
+ // Check boundry\r
+ if(( addr + 1 ) >= FLASH_SIZE ){\r
+ char msg[ 80 ]; // FIXME - Magic Number\r
+ sprintf(\r
+ msg,\r
+ "get_flash_word: Word Address: %04X, exceeds FLASH_SIZE: %04X", \r
+ addr, FLASH_SIZE);\r
+ throw TGenericError( msg ); \r
+ }\r
+\r
+ *high_byte_written = code_byte_written[ addr ];\r
+ *low_byte_written = code_byte_written[ addr + 1 ];\r
+\r
+ return( ( code_space[ addr ] << 8 ) | code_space[ addr + 1 ] );\r
+}\r
+\r
+void TFlash::Dump( void ){\r
+ char code_line[ 60 ]; // FIXME - Magic Number\r
+ char ascii_line[ 20 ]; // FIXME - Magic Number\r
+ char* pcode_line;\r
+ char* pascii_line;\r
+ unsigned char c1;\r
+ unsigned char c2;\r
+ int have_data;\r
+\r
+ int i;\r
+ int j;\r
+\r
+ for( i = 0; i < FLASH_SIZE; i += 0x10 ){\r
+\r
+ pcode_line = code_line;\r
+ pascii_line = ascii_line;\r
+ have_data = FALSE;\r
+\r
+ for( j = 0; j < 0x8; j += 2 ){\r
+\r
+ c1 = code_space[ i + j ];\r
+ c2 = code_space[ i + j + 1 ];\r
+\r
+ sprintf( pcode_line, "%02X%02X ", c1, c2 );\r
+\r
+ sprintf(\r
+ pascii_line,\r
+ "%c%c",\r
+ c1 >= (unsigned char)' ' && c1 <= (unsigned char)'~' ? c1 : '.',\r
+ c2 >= (unsigned char)' ' && c2 <= (unsigned char)'~' ? c2 : '.' );\r
+\r
+ // Cover them up if they weren't really there.\r
+ if( code_byte_written[ i + j ] ){\r
+ have_data = TRUE;\r
+ } else {\r
+ *( pcode_line + 0 ) = '-';\r
+ *( pcode_line + 1 ) = '-';\r
+ *( pascii_line + 0 ) = ' ';\r
+ }\r
+\r
+ if( code_byte_written[ i + j + 1 ] ){\r
+ have_data = TRUE;\r
+ } else {\r
+ *( pcode_line + 2 ) = '-';\r
+ *( pcode_line + 3 ) = '-';\r
+ *( pascii_line + 1 ) = ' ';\r
+ }\r
+\r
+ pcode_line += 5;\r
+ pascii_line += 2;\r
+ }\r
+\r
+ *pascii_line++ = ' ';\r
+\r
+ while( j < 0x10 ){\r
+\r
+ c1 = code_space[ i + j ];\r
+ c2 = code_space[ i + j + 1 ];\r
+\r
+ sprintf( pcode_line, " %02X%02X", c1, c2 );\r
+\r
+ sprintf(\r
+ pascii_line,\r
+ "%c%c",\r
+ c1 >= (unsigned char)' ' && c1 <= (unsigned char)'~' ? c1 : '.',\r
+ c2 >= (unsigned char)' ' && c2 <= (unsigned char)'~' ? c2 : '.' );\r
+\r
+ // Cover them up if they weren't really there.\r
+ if( code_byte_written[ i + j ] ){\r
+ have_data = TRUE;\r
+ } else {\r
+ *( pcode_line + 1 ) = '-';\r
+ *( pcode_line + 2 ) = '-';\r
+ *( pascii_line + 0 ) = ' ';\r
+ }\r
+\r
+ if( code_byte_written[ i + j + 1 ] ){\r
+ have_data = TRUE;\r
+ } else {\r
+ *( pcode_line + 3 ) = '-';\r
+ *( pcode_line + 4 ) = '-';\r
+ *( pascii_line + 1 ) = ' ';\r
+ }\r
+\r
+ pcode_line += 5;\r
+ pascii_line += 2;\r
+ j += 2;\r
+ }\r
+\r
+ if( have_data ){\r
+ printf( "%04X: %s %s\n", i, code_line, ascii_line );\r
+ }\r
+ }\r
+}\r
+\r
+void TFlash::DebugDump( void ){\r
+ char code_line[ 60 ]; // FIXME - Magic Number\r
+ char flag_line[ 20 ]; // FIXME - Magic Number\r
+ char ascii_line[ 20 ]; // FIXME - Magic Number\r
+ char* pcode_line;\r
+ char* pflag_line;\r
+ char* pascii_line;\r
+ unsigned char c1;\r
+ unsigned char c2;\r
+\r
+ int i;\r
+ int j;\r
+\r
+ for( i = 0; i < FLASH_SIZE; i += 0x10 ){\r
+\r
+ pcode_line = code_line;\r
+ pflag_line = flag_line;\r
+ pascii_line = ascii_line;\r
+\r
+ for( j = 0; j < 0x8; j += 2 ){\r
+\r
+ c1 = code_space[ i + j ];\r
+ c2 = code_space[ i + j + 1 ];\r
+\r
+ sprintf( pcode_line, "%02X%02X ", c1, c2 );\r
+\r
+ pcode_line += 5;\r
+\r
+ sprintf(\r
+ pflag_line,\r
+ "%1.1d%1.1d",\r
+ code_byte_written[ i + j ],\r
+ code_byte_written[ i + j + 1 ] );\r
+\r
+ pflag_line += 2;\r
+\r
+ sprintf(\r
+ pascii_line,\r
+ "%c%c",\r
+ c1 >= (unsigned char)' ' && c1 <= (unsigned char)'~' ? c1 : '.',\r
+ c2 >= (unsigned char)' ' && c2 <= (unsigned char)'~' ? c2 : '.' );\r
+\r
+ pascii_line += 2;\r
+ }\r
+\r
+ *pflag_line++ = ' ';\r
+ *pascii_line++ = ' ';\r
+\r
+ while( j < 0x10 ){\r
+\r
+ c1 = code_space[ i + j ];\r
+ c2 = code_space[ i + j + 1 ];\r
+\r
+ sprintf( pcode_line, " %02X%02X", c1, c2 );\r
+\r
+ pcode_line += 5;\r
+\r
+ sprintf(\r
+ pflag_line,\r
+ "%1.1d%1.1d",\r
+ code_byte_written[ i + j ],\r
+ code_byte_written[ i + j + 1 ] );\r
+\r
+ pflag_line += 2;\r
+\r
+ sprintf(\r
+ pascii_line,\r
+ "%c%c",\r
+ c1 >= (unsigned char)' ' && c1 <= (unsigned char)'~' ? c1 : '.',\r
+ c2 >= (unsigned char)' ' && c2 <= (unsigned char)'~' ? c2 : '.' );\r
+\r
+ pascii_line += 2;\r
+ j += 2;\r
+ }\r
+\r
+ printf( "%04X: %s %s %s\n", i, code_line, flag_line, ascii_line );\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Flash.h, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#ifndef __EEPROM\r
+#define __EEPROM\r
+\r
+// Code Size is 8K Flash\r
+#define FLASH_SIZE ( 0x2000 )\r
+\r
+/* Flash Class */\r
+class TFlash{\r
+\r
+ public:\r
+\r
+ TFlash();\r
+ ~TFlash(){}\r
+\r
+ void FlipEndian( void );\r
+\r
+ void flashset(\r
+ unsigned short addr,\r
+ unsigned char nbytes,\r
+ const unsigned char* data);\r
+\r
+ unsigned short get_flash_word(\r
+ unsigned short addr,\r
+ int* high_byte_written,\r
+ int* low_byte_written );\r
+\r
+ void Dump( void );\r
+ void DebugDump( void );\r
+\r
+ private:\r
+\r
+ unsigned char code_space[ FLASH_SIZE ];\r
+ int code_byte_written[ FLASH_SIZE ];\r
+};\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: IntelHex.C, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+// Format:\r
+// :CCAAAARR...ZZ\r
+//\r
+// where:\r
+// CC is the number of data bytes\r
+// AAAA is the address field\r
+// RR is the record type:\r
+// 00 data record\r
+// 01 end record\r
+// 02 paragraph record\r
+// 03 transfer address record\r
+// ... is the Data field\r
+// ZZ is the checksum for data record\r
+//\r
+// All fields in an Intel hex record are in hexadecimal with two hex digits\r
+// representing a byte. The CC field is the actual number of bytes in the data\r
+// field (the address, record type, and checksum bytes are not included in the\r
+// count). The checksum is the two's complement of the sum of the bytes from\r
+// the number of data bytes field through the last byte of the data field.\r
+\r
+#include <stdio.h>\r
+#include <string.h> /* Nick */\r
+\r
+#include "Error.h"\r
+#include "IntelHex.h"\r
+\r
+static unsigned char Ascii2Hex(const char* ps){\r
+ unsigned char retval;\r
+\r
+ retval = *ps < 'A' ? *ps - '0' : *ps - 'A' + 0xA;\r
+ retval <<= 4;\r
+ ps++;\r
+ retval |= *ps < 'A' ? *ps - '0' : *ps - 'A' + 0xA;\r
+\r
+ return( retval );\r
+}\r
+\r
+void TIntelHexRecord::StringToRecord(const char* ps){\r
+ const char* pc;\r
+ unsigned char uc;\r
+ unsigned char cs = 0;\r
+ unsigned char n;\r
+\r
+ pc = ps;\r
+\r
+ if( *pc++ != ':' ){\r
+ char msg[ 80 ]; // FIXME - Magic Number\r
+ sprintf( msg,\r
+ "StringToRecord: Invalid Record (doesn't begin with ':'):\n"\r
+ "\"%s\"", ps );\r
+ throw TGenericError( msg );\r
+ }\r
+\r
+ nbytes = Ascii2Hex( pc );\r
+ cs -= nbytes;\r
+ pc += 2;\r
+\r
+ uc = Ascii2Hex( pc );\r
+ cs -= uc;\r
+ addr = uc << 8;\r
+ pc += 2;\r
+\r
+ uc = Ascii2Hex( pc );\r
+ cs -= uc;\r
+ addr |= uc;\r
+ pc += 2;\r
+\r
+ type = Ascii2Hex( pc );\r
+ cs -= type;\r
+ pc += 2;\r
+\r
+ for( n = 0; n < nbytes; n++ ){\r
+ uc = Ascii2Hex( pc );\r
+ cs -= uc;\r
+ data[ n ] = uc;\r
+ pc += 2;\r
+ }\r
+\r
+ if( Ascii2Hex( pc ) != cs ){\r
+ char msg[ 80 ]; // FIXME - Magic Number\r
+ sprintf( msg,\r
+ "Invalid Record (bad checksum)\n"\r
+ "%s", ps );\r
+ throw TGenericError( msg );\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: IntelHex.h, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#ifndef __INTELHEX\r
+#define __INTELHEX\r
+\r
+/* Intel Hex Record Class */\r
+class TIntelHexRecord{\r
+ public:\r
+ TIntelHexRecord(){}\r
+ ~TIntelHexRecord(){}\r
+\r
+ void StringToRecord(const char* ps);\r
+ inline unsigned char get_nbytes(){ return nbytes; }\r
+ inline unsigned short get_addr() { return addr; }\r
+ inline unsigned char get_type() { return type; }\r
+ inline const unsigned char* get_data() { return data; }\r
+\r
+ private:\r
+ unsigned char nbytes;\r
+ unsigned short addr;\r
+ unsigned char type;\r
+ unsigned char data[ 256 ]; // FIXME - Magic Number\r
+};\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Main.C\r
+ Parts of this are Copyright (C) 1997-1999 Uros Platise\r
+ The rest of it is Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#include <stdio.h>\r
+#include <string.h> /* Nick */\r
+#include <stdlib.h> /* Nick */\r
+\r
+#include "Error.h"\r
+#include "Flash.h"\r
+#include "Object.h"\r
+#include "Source.h"\r
+\r
+const char* version = "Atmel Dis-Assembler 0.3\n";\r
+\r
+const char* help =\r
+"Syntax: revava [switches] file\n"\r
+"Switches:\n"\r
+" -d Dump Flash and exit.\n"\r
+" -D Debug Dump Flash and exit (maybe should be Dubious Dump).\n"\r
+" -e Use little endian (Intel byte order).\n"\r
+" -o file Set output file name (to redirect the output to stdout: -o stdout)\n"\r
+" -v Verbose (enable info - currently does nothing).\n"\r
+" --help Print this help.\n"\r
+" --version Output version information.\n";\r
+\r
+#define FALSE 0\r
+#define TRUE (!FALSE)\r
+\r
+int arg_d = FALSE;\r
+int arg_D = FALSE;\r
+int arg_e = FALSE;\r
+int arg_v = FALSE;\r
+\r
+int main( int argc, char* argv[] ){\r
+\r
+ TFlash* pFlash;\r
+ TObjectIn* pObjectIn;\r
+ TSourceOut* pSourceOut;\r
+\r
+ char* infile = NULL;\r
+ char* OutFile = "out.s";\r
+ int ai;\r
+\r
+ try{\r
+ for ( ai = 1; ai < argc; ai++ ){\r
+ if ( argv[ ai ][ 0 ] == '-' ){\r
+ if ( argv[ ai ][ 2 ] == '\0' ){\r
+ switch( argv[ ai ][ 1 ] ){\r
+\r
+ case 'd':\r
+ arg_d = TRUE;\r
+ break ;\r
+\r
+ case 'D':\r
+ arg_D = TRUE;\r
+ break ;\r
+\r
+ case 'e':\r
+ arg_e = TRUE;\r
+ break ;\r
+\r
+ case 'o':\r
+ if ( ++ai >= argc )\r
+ throw TGenericError( "-o: File name is missing." );\r
+\r
+ OutFile = argv[ ai ];\r
+\r
+ break ;\r
+\r
+ case 'v':\r
+ arg_v = TRUE;\r
+ break ;\r
+\r
+ default:\r
+ throw TGenericError("Invalid switch:", argv[ai]);\r
+ }\r
+ }\r
+ else if ( argv[ ai ][ 1 ] == '-' ){\r
+ if ( strcmp( &argv[ ai ][ 2 ], "help" ) == 0 ){\r
+ printf( "%s\n\n%s\n", version, help );\r
+ exit( 1 );\r
+ }\r
+ else if ( strcmp( &argv[ ai ][ 2 ], "version" ) == 0 ){\r
+ printf( "%s\n", version );\r
+ exit( 1 );\r
+ }\r
+ else{\r
+ throw TGenericError( "Invalid switch:", argv[ ai ] );\r
+ }\r
+ }\r
+ }\r
+ else{\r
+ infile = argv[ ai ];\r
+ }\r
+ }\r
+\r
+ if ( !infile ){\r
+ printf( "%s\n\n%s\n", version, help );\r
+ exit( 1 );\r
+ }\r
+\r
+ // Set up the Memory\r
+ pFlash = new TFlash();\r
+\r
+ // Read the code into the fake flash\r
+ pObjectIn = new TObjectIn( infile, pFlash );\r
+\r
+ // Fix Big Endian/Little Endian if that's a problem.\r
+ if( arg_e )\r
+ pFlash->FlipEndian();\r
+\r
+ if( arg_d ) {\r
+ pFlash->Dump();\r
+ } else if ( arg_D ) {\r
+ pFlash->DebugDump();\r
+ }\r
+ else {\r
+ //pObjectIn->~TObjectIn();\r
+ pSourceOut = new TSourceOut( OutFile, pFlash );\r
+ }\r
+\r
+ }\r
+ catch ( TGenericError E ){\r
+ E.report();\r
+ }\r
+ catch ( TFileError E ){\r
+ E.report();\r
+ }\r
+\r
+ return 0 ;\r
+}\r
--- /dev/null
+# Program: revava - Atmel Dis-Assembler\r
+# File: Makefile\r
+# Parts of this are Copyright (C) 1997-1999 Uros Platise\r
+# The rest of it is Copyright (C) 2001 Daniel J. Winker\r
+#\r
+# This program is free software; you can redistribute it and/or\r
+# modify it under the terms of the GNU General Public License\r
+# as published by the Free Software Foundation; either version 2\r
+# of the License, or (at your option) any later version.\r
+#\r
+# This program is distributed in the hope that it will be useful,\r
+# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+# GNU General Public License for more details.\r
+#\r
+# You should have received a copy of the GNU General Public License\r
+# along with this program; if not, write to the Free Software\r
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+\r
+\r
+# The following lines declare compile options. \r
+#\r
+# Note: -O option cannot be specifed for GNU C++ version 2.7.2.1\r
+# due to the internal bug. That is why is not specifed by default.\r
+\r
+ SRC = Avr.C Flash.C IntelHex.C Main.C Object.C Source.C\r
+ OBJ = Avr.o Flash.o IntelHex.o Main.o Object.o Source.o\r
+ CC = g++\r
+ LIBS =\r
+\r
+# Old testing flags ...\r
+# CPPFLAGS= -DAVA_LIB="\"$(AVA_LIB)\"" -Wall \\r
+# -fhandle-exceptions -fenum-int-equiv -fnonnull-objects \\r
+# -fforce-addr -fthread-jumps -felide-constructors\r
+\r
+# Add -O option for version 2.8 or more ...\r
+\r
+# GNU C++ compiler\r
+# CPPFLAGS= -Wall -fhandle-exceptions -fenum-int-equiv\r
+\r
+# egcs C++ compiler with debug\r
+# CPPFLAGS= -g -O3 -Wall\r
+\r
+# egcs C++ compiler without debug\r
+ CPPFLAGS= -O3 -Wall\r
+\r
+# Do the stuff as specified above.\r
+all: revava make_test_source\r
+\r
+revava: $(OBJ)\r
+ $(CC) -o $@ $(CPPFLAGS) $(OBJ) $(LIBS)\r
+\r
+make_test_source: Avr.o make_test_source.o\r
+ $(CC) -o $@ $(CPPFLAGS) Avr.o make_test_source.o\r
+\r
+Avr.o: Avr.C Avr.h Error.h\r
+Flash.o: Flash.C Error.h Flash.h\r
+IntelHex.o: IntelHex.C IntelHex.h Error.h\r
+Main.o: Main.C Error.h Flash.h Object.h\r
+Object.o: Object.C Error.h Flash.h IntelHex.h Object.h Source.h\r
+Source.o: Source.C Avr.h Error.h Flash.h Source.h\r
+\r
+make_test_source.o: make_test_source.C Avr.h\r
+\r
+clean:\r
+ rm -f *~ *.o revava make_test_source\r
+\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Object.C, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#include <stdio.h>\r
+#include <strings.h>\r
+\r
+#include "Error.h"\r
+#include "Flash.h"\r
+#include "IntelHex.h"\r
+#include "Object.h"\r
+#include "Source.h"\r
+\r
+TObjectIn::TObjectIn(const char* infile, TFlash* pFlash){\r
+ TIntelHexRecord HexRec;\r
+ FILE* pf;\r
+ char s[256]; // FIXME - Magic Number\r
+ char* pc;\r
+ int line = 0;\r
+\r
+ pf = fopen(infile, "r");\r
+\r
+ if( NULL == pf )\r
+ throw TFileError("Cannot open file:", infile);\r
+ \r
+ try{\r
+ while( fgets( s, 256, pf ))\r
+ {\r
+ // Replace the newline with '\0'\r
+ if( NULL != ( pc = rindex( s, '\n' )))\r
+ *pc = '\0' ;\r
+\r
+ line++;\r
+ HexRec.StringToRecord( s );\r
+\r
+ if( 0 == HexRec.get_type())\r
+ pFlash->flashset(\r
+ HexRec.get_addr(),\r
+ HexRec.get_nbytes(),\r
+ HexRec.get_data());\r
+ }\r
+ }\r
+ catch ( TGenericError E ){\r
+ char msg[ 80 ]; // FIXME - Magic Number\r
+ sprintf( msg, "Error: File: %s, Line: %d\n", infile, line );\r
+ E.prepend_message( msg );\r
+ throw E ;\r
+ }\r
+\r
+ fclose(pf);\r
+}\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Object.h, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#ifndef __Object\r
+#define __Object\r
+\r
+#include "Flash.h"\r
+\r
+class TObjectIn{\r
+ public: \r
+ TObjectIn( const char* infile, TFlash* pFlash );\r
+ ~TObjectIn(){}\r
+};\r
+\r
+#endif\r
--- /dev/null
+README for revava-0.3, Copyright (C) 2001, Daniel J. Winker\r
+\r
+Short description:\r
+Disassembler for Atmel AVR microcontroller firmware.\r
+\r
+Full description:\r
+revava is a single pass disassembler that reads in a file containing a\r
+program intended for an Atmel AVR microcontroller and outputs assembly\r
+code that can be input to an avr assembler. The output of revava\r
+contains assembler mnemonics where possible and dc.W declarations where\r
+no mnemonic matches the data. The comment field for each assembly\r
+instruction contains the address from the object code and the\r
+destination address for branches, calls, jumps, etc. In the case where\r
+there are multiple assembly instructions that assemble to the same\r
+opcode, all choices are presented in a group with all but the first\r
+choice commented out. make_labels.pl is a Perl script that's been\r
+included. It takes the output of revava and puts "jump to" and function\r
+labels in the code.\r
+\r
+This is an early release of revava. Right now only Intel hex files are\r
+supported for input. It would not be hard to add support for other\r
+formats. See the file TODO for more ideas.\r
+\r
+I took a lot of the code (probably about half) from AVA Version 0.3b\r
+which was written by Uros Platise and is available from\r
+http://medo.fov.uni-mb.si/mapp. AVA is an Atmel AVR assembler.\r
+\r
+Compiling:\r
+\r
+The code is pretty vannilla C++. It should build with just about any\r
+C++ compiler. I tried it with gcc egcs-2.91.66 on linux and gcc 2.95.1\r
+on Solaris 7. The only problem I noticed is that the Linux version\r
+wanted\r
+\r
+ #include <string.h>\r
+\r
+and the Solaris version wanted\r
+\r
+ #include <strings.h>\r
+\r
+I left it at <string.h>, so you might have to adjust that to get it to\r
+compile on your system.\r
+\r
+After downloading the latest tarball (x.y is the version number)\r
+\r
+ tar -xvzf revava-x.y.tar.gz\r
+ cd revava-x.y\r
+\r
+Here you might want to edit the Makefile for your own preferences, then:\r
+\r
+ make\r
+\r
+This should make two executables: "revava" and "make_test_source". revava\r
+is the disassembler. make_test_source just spits out some AVR assembly code\r
+that uses every instruction with different combinations of arguments.\r
+\r
+After that you might want to\r
+\r
+ strip revava\r
+\r
+I thought not using -g as a compiler flag made the executable as small\r
+as possible, but "strip revava" makes it even smaller.\r
+\r
+Testing:\r
+\r
+If you want to test it and you have AVA (which can be obtained at\r
+http://medc.fov.uni-mb.si/mapp) you can execute the following:\r
+\r
+ # This makes some crazy assembly code. Don't try to run it!\r
+ ./make_test_source > test_source.s\r
+\r
+ # The following two lines create an Intel hex file named test.flash\r
+ ava test_source.s\r
+ ava --intel -o test test_source.o\r
+\r
+ # This creates another assembly file that should be equivalent\r
+ # to test_source.s\r
+ revava test.flash\r
+\r
+ # Try to assemble revava's output\r
+ ava out.s\r
+ ava --intel out.o\r
+\r
+ # See if we ended up back where we started\r
+ diff test.flash a.out.flash\r
+\r
+There should be no difference.\r
+\r
+Installing:\r
+\r
+There is no "make install" target in the makefile. (See TODO file).\r
+So, just copy or move the executable "revava" to /usr/local/bin or\r
+wherever you want to keep it. This README file is the extent of the\r
+documentation (See TODO file), so keep it around when you use revava.\r
+\r
+Using:\r
+\r
+Just typing "revava" and hitting enter returns something like this:\r
+\r
+ Atmel Dis-Assembler 0.1\r
+\r
+ Syntax: revava [switches] file\r
+ Switches:\r
+ -d Dump Flash and exit.\r
+ -D Debug Dump Flash (maybe should be Dubious Dump).\r
+ -e Use little endian (Intel byte order).\r
+ -o file Output file name (to redirect to stdout -o stdout).\r
+ --help Print this help.\r
+ --version Output version information.\r
+\r
+"file" is of course the object file that we want to disassemble. I'll\r
+go through the switches one at a time.\r
+\r
+-d Dump Flash and exit.\r
+\r
+This does the (probably) familiar hex dump that looks something like\r
+this:\r
+\r
+ 04E0: 5000 570F 5F0F 5080 578F 5F8F 50F0 57FF P.W._.P. W._.P.W.\r
+ 04F0: 5FFF 9402 94F2 95F2 2000 20FF 23FF 95A8 _....... . .#...\r
+ 1000: FFFF 940E 940C ---- ---- ---- ---- ---- ...... \r
+\r
+The leftmost column is the address in hex. Then we have the hex data\r
+and finally an ASCII representation of the data if it seems appropriate.\r
+The '-' characters in the hex data area mean that that data did not show\r
+up in the input object file. (There was data at addresses 1000 to 1005,\r
+but nothing from 1006 to 100F). Similarily, there are no addresses\r
+shown from 0500 to 09FF because they didn't show up in the input file.\r
+\r
+This option in combination with the -e flag is actually very useful for\r
+finding text strings embedded in the object file.\r
+\r
+-D Debug Dump Flash and exit.\r
+\r
+This is mostly for debugging revava itself. The output is pretty\r
+similar to what you get with the -d flag, except the entire flash space\r
+is dumped - whether it was present in the input file or not - and there\r
+is an extra field that is the flags that keep track of what parts of\r
+flash showed up in the input. One problem with this output is that it\r
+is more than 80 columns wide.\r
+\r
+-e Use little endian (Intel byte order)\r
+\r
+This flips the bytes in each word right after reading in the input file.\r
+This is useful because typically the way that works for disassembling is\r
+oppisite of the way that makes strings show up right with the -d flag.\r
+Try it once without -e and once with -e to see which one disassembles\r
+right. Then try the -d flag once without -e and once with -e to see\r
+which one displays any strings correctly.\r
+\r
+-o file Output file name\r
+\r
+Should be pretty straightforward. I suppose redirecting to stdout with\r
+\r
+ revava -o stdout input.hex\r
+\r
+is a little strange. Oh well.\r
+\r
+--help Print this help.\r
+--version Output version information.\r
+\r
+These two should also be pretty straightforward.\r
+\r
+make_labels.pl:\r
+\r
+Run this on the output of revava to add function labels and simple\r
+"jump to" labels. This makes the output source a little easier to read.\r
+For instance, it will change this:\r
+\r
+ clr r16 ; 04E0\r
+ ;eor r16, r16 ; 04E0\r
+\r
+ ldi r16, 0x6 ; 04E2\r
+ sts 0x0074, r16 ; 04E4\r
+ rjmp 910 ; 04F8, Dest: 0888\r
+ rcall 1528 ; 04FA, Dest: 0AF4\r
+\r
+into this:\r
+\r
+ L042:\r
+ clr r16 ; 04E0\r
+ ;eor r16, r16 ; 04E0\r
+\r
+ ldi r16, 0x6 ; 04EA\r
+ sts 0x0074, r16 ; 04EC\r
+ rjmp L115 ; 04F0, Dest: 0888\r
+\r
+ Func005:\r
+ rcall Func008 ; 04F2, Dest: 0AF4\r
+\r
+make_labels.pl reads in a file and outputs to stdout, so typically you\r
+would do something like this:\r
+\r
+ revava -o prog.s program.hex\r
+ make_labels.pl prog.s > program.s\r
+\r
+If make_labels.pl can't find the "jump to" or function address it just\r
+adds "##### Dest BOGUS #####" to the end of the source line. This means\r
+that the destination address is either in the middle of a double word\r
+instruction or the destination address was never included in the\r
+original object file. A section of the code with lots of\r
+"##### Dest BOGUS #####" comments is probably really a data section.\r
+\r
+Note, make_labels.pl is much less tested than revava. You should use an\r
+assembler to make sure you can recreate the object code from your brand\r
+new source.\r
+\r
+Contact:\r
+\r
+The website for revava is currently http://www.visi.com/~dwinker/revava.\r
+I can be contacted at dwinker@tiny.net.\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Source.C, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+\r
+ CHANGES:\r
+ 14-Mar-2001, Dan Winker\r
+ Added op_code_addr. See Bug_0001 in CHANGES.\r
+*/\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+#include "Avr.h"\r
+#include "Error.h"\r
+#include "Flash.h"\r
+#include "Source.h"\r
+\r
+#define FALSE 0\r
+#define TRUE (!FALSE)\r
+\r
+//#define DEBUG\r
+\r
+TSourceOut::TSourceOut( const char* OutFile, TFlash* pFlash ){\r
+ TAvr Avr;\r
+ TAvr::TInstruction Instruction;\r
+ int Index;\r
+ int line_count;\r
+ FILE* pOutFile;\r
+ TSourceString* pSourceString_temp;\r
+ TSourceString* pSourceString_head;\r
+ TSourceString* pSourceString_tail;\r
+ int last_line_was_blank = FALSE;\r
+ int look_for_new_segment = TRUE;\r
+ int code_seg_num = 0;\r
+ unsigned short code_word;\r
+ unsigned short temp_short;\r
+ unsigned long temp_long;\r
+ int addr;\r
+ int op_code_addr;\r
+ int dest = 0;\r
+ int have_dest;\r
+ int high_byte_written;\r
+ int low_byte_written;\r
+ char temp_string[ 80 ]; // FIXME - Magic Number\r
+ char temp_string2[ 80 ]; // FIXME - Magic Number\r
+ char* pLastTab;\r
+ char* tabs;\r
+\r
+ prolog_head = NULL;\r
+ prolog_tail = NULL;\r
+ body_head = NULL;\r
+ body_tail = NULL;\r
+\r
+ if( 0 == strcmp( "stdout", OutFile ) ){\r
+ pOutFile = stdout;\r
+ } else {\r
+ pOutFile = fopen( OutFile, "w" );\r
+ }\r
+\r
+ if( NULL == pOutFile )\r
+ throw TFileError( "Cannot open file for writing:", OutFile );\r
+\r
+ // FIXME - This probably doesn't belong burried deep withing a function.\r
+ // This probably should be much more configurable.\r
+ push_prolog( "#arch AT90S8515" );\r
+ push_prolog( "#include \"avr.inc\"" );\r
+\r
+ for( addr = 0; addr < FLASH_SIZE; addr += 2 ){\r
+\r
+ // Sometimes addr will get bumped because of a double word\r
+ // instruction, but we still want to report the address of the\r
+ // first word of the instruction. op_code_addr is what is\r
+ // reported.\r
+ op_code_addr = addr;\r
+\r
+ code_word = pFlash->get_flash_word(\r
+ addr,\r
+ &high_byte_written,\r
+ &low_byte_written );\r
+\r
+ #ifdef DEBUG_1\r
+ printf( "DEBUG - SourceOut: ##############################\n" );\r
+ printf( "DEBUG - SourceOut: addr = %04X\n", addr );\r
+ printf( "DEBUG - SourceOut: code_word = %04X\n", code_word );\r
+ printf( "DEBUG - SourceOut: high_byte_written = %04X\n", high_byte_written );\r
+ printf( "DEBUG - SourceOut: low_byte_written = %04X\n", low_byte_written );\r
+ #endif\r
+\r
+ if( high_byte_written != low_byte_written ){\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut: Word Address: %04X: high_byte_written != low_byte_written.",\r
+ addr );\r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+\r
+ if( high_byte_written ){\r
+\r
+ if( look_for_new_segment ){\r
+ #ifdef DEBUG\r
+ printf( "DEBUG - SourceOut: Need Org Statement For: %04X\n", addr );\r
+ #endif\r
+\r
+ sprintf( temp_string, "\tseg abs=0x%X flash.code%d", addr, code_seg_num );\r
+ push_body( "" );\r
+ push_body( temp_string );\r
+ push_body( "" );\r
+ last_line_was_blank = TRUE;\r
+\r
+ code_seg_num++;\r
+ look_for_new_segment = FALSE;\r
+ }\r
+\r
+ // First Time Through\r
+ pSourceString_head = NULL;\r
+ pSourceString_tail = NULL;\r
+ Index = 0;\r
+ while( 0 != ( Index = Avr.Word2Instruction(\r
+ &Instruction,\r
+ code_word,\r
+ Index ))){\r
+\r
+ #ifdef DEBUG\r
+ printf( "DEBUG - SourceOut: Index = %d\n", Index);\r
+ printf( "DEBUG - SourceOut: Addr:OpCode = %04X:%04X\n", addr, code_word );\r
+ printf( "DEBUG - SourceOut: Instruction.name = %s\n", Instruction.name );\r
+ printf( "DEBUG - SourceOut: Instruction.arg0_format = %c\n", Instruction.arg0_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg1_format = %c\n", Instruction.arg1_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg0_type = %d\n", Instruction.arg0_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg1_type = %d\n", Instruction.arg1_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg0 = %04X\n", Instruction.arg0 );\r
+ printf( "DEBUG - SourceOut: Instruction.arg1 = %04X\n", Instruction.arg1 );\r
+ #endif\r
+\r
+ have_dest = FALSE;\r
+\r
+ if( TAvr::ARG_longCall == Instruction.arg0_type ){\r
+\r
+ // These arg types are special because they also use the\r
+ // next word as part of the opcode.\r
+\r
+ // A really paranoid programmer would do a bounds check\r
+ // on addr here.\r
+ addr += 2;\r
+ temp_short = pFlash->get_flash_word(\r
+ addr,\r
+ &high_byte_written,\r
+ &low_byte_written );\r
+\r
+ if( !high_byte_written || !low_byte_written ){\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut: Word Address: %04X: Needed Entire Word Written",\r
+ addr );\r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ temp_long =\r
+ ( (unsigned long)Instruction.arg0 << 16 ) |\r
+ ( (unsigned long)temp_short );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t0x%04lX",\r
+ Instruction.name,\r
+ temp_long );\r
+\r
+ } else if(\r
+ TAvr::ARG_neg64_63 == Instruction.arg0_type ||\r
+ TAvr::ARG_neg2KB_2KB == Instruction.arg0_type ) {\r
+\r
+ // We insist that arg types of ARG_neg64_63 and\r
+ // ARG_neg2KB_2KB have an arg format of 'k'.\r
+ if( 'k' != Instruction.arg0_format ){\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruciton has arg0_type = ARG_neg64_63 or ARG_neg2KB_2KB\n"\r
+ "\twith 'k' != ( arg0_format = '%c' )",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+ \r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ // We also insist that arg0 types of ARG_neg64_63 and\r
+ // ARG_neg2KB_2KB do not have an arg1.\r
+ if( TAvr::ARG_none != Instruction.arg1_type ){\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruciton has arg0_type = ARG_neg64_63 or ARG_neg2KB_2KB\n"\r
+ "\twith ARG_none != arg1_type",\r
+ Instruction.name );\r
+ \r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%d",\r
+ Instruction.name,\r
+ (short)Instruction.arg0 );\r
+\r
+ have_dest = TRUE;\r
+#if 0 /* Nick */\r
+ dest = addr; /* + 1 + (short)Instruction.arg0; */\r
+#else\r
+ dest = addr + 2 + (short)Instruction.arg0;\r
+#endif\r
+\r
+ } else {\r
+\r
+ switch( Instruction.arg0_format ){\r
+\r
+ case '\0':\r
+\r
+ // No args to this instruction\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s",\r
+ Instruction.name );\r
+\r
+ break;\r
+\r
+ case 'd':\r
+ case 'r':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\tr%d",\r
+ Instruction.name,\r
+ Instruction.arg0 );\r
+\r
+ break;\r
+\r
+ case 'k':\r
+ case 's':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%d",\r
+ Instruction.name,\r
+ (short)Instruction.arg0 );\r
+\r
+ break;\r
+\r
+ case 'P':\r
+ case 'p':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t0x%X",\r
+ Instruction.name,\r
+ Instruction.arg0 );\r
+\r
+ break;\r
+\r
+ case 'X':\r
+ case 'Y':\r
+ case 'Z':\r
+\r
+ if( 0 == strcmp( "std", Instruction.name )){\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%c+%d",\r
+ Instruction.name,\r
+ Instruction.arg0_format,\r
+ Instruction.arg0 );\r
+\r
+ } else {\r
+\r
+ // It's a little convoluted how we get the\r
+ // information back from TAvr::AdjustArg about\r
+ // whether to us "X", "X+", or "-X". In this\r
+ // arg_format is 'X'. We differentiate by\r
+ // setting the value of arg (which is an\r
+ // (unsigned short)) to one of ' ', '+' or '-'.\r
+ switch( (char)Instruction.arg0 ){\r
+\r
+ case ' ':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%c",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+\r
+ break;\r
+\r
+ case '+':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%c+",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+\r
+ break;\r
+\r
+ case '-':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t-%c",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has special arg0_format: '%c'\n"\r
+ "\twith unknown arg0 of: 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg0_format,\r
+ Instruction.arg0 );\r
+ \r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+\r
+ }\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has unknown arg0_format: '%c'\n"\r
+ "\targ0 is 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg0_format,\r
+ Instruction.arg0 );\r
+\r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+\r
+ } // end "switch( Instruction.arg0_format )"\r
+\r
+ } // end else part of "if( Arg_longCall == Instruction.arg0_type )"\r
+\r
+ if( TAvr::ARG_longCall == Instruction.arg1_type ){\r
+\r
+ // These arg types are special because they also use the\r
+ // next word as part of the opcode.\r
+\r
+ // A really paranoid programmer would do a bounds check\r
+ // on addr here.\r
+ addr += 2;\r
+ temp_short = pFlash->get_flash_word(\r
+ addr,\r
+ &high_byte_written,\r
+ &low_byte_written );\r
+\r
+\r
+ if( !high_byte_written || !low_byte_written ){\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut: Word Address: %04X: Needed Entire Word Written",\r
+ addr );\r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ temp_long =\r
+ ( (unsigned long)Instruction.arg1 << 16 ) |\r
+ ( (unsigned long)temp_short );\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, 0x%04lX",\r
+ temp_string2,\r
+ temp_long );\r
+\r
+ } else if( TAvr::ARG_neg64_63 == Instruction.arg1_type ) {\r
+\r
+ // We insist that an ARG_neg64_63 arg type have\r
+ // an arg format of 'k'.\r
+ if( 'k' != Instruction.arg1_format ){\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruciton has arg1_type = ARG_neg64_63\n"\r
+ "\twith 'k' != ( arg1_format = '%c' )",\r
+ Instruction.name,\r
+ Instruction.arg1_format );\r
+ \r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %d",\r
+ temp_string2,\r
+ (short)Instruction.arg1 );\r
+\r
+ have_dest = TRUE;\r
+ dest = addr + 2 + (short)Instruction.arg1;\r
+\r
+ } else {\r
+\r
+ switch( Instruction.arg1_format ){\r
+\r
+ case '\0':\r
+ // No arg1 to this instruction. No more to do.\r
+ break;\r
+\r
+ case 'b':\r
+ case 'k':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %d",\r
+ temp_string2,\r
+ (short)Instruction.arg1 );\r
+\r
+ break;\r
+\r
+ case 'd':\r
+ case 'r':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, r%d",\r
+ temp_string2,\r
+ Instruction.arg1 );\r
+\r
+ break;\r
+\r
+ case 'K':\r
+ case 'P':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, 0x%X",\r
+ temp_string2,\r
+ Instruction.arg1 );\r
+\r
+ break;\r
+\r
+ case 'X':\r
+ case 'Y':\r
+ case 'Z':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ if( 0 == strcmp( "ldd", Instruction.name )){\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %c+%d",\r
+ temp_string2,\r
+ Instruction.arg1_format,\r
+ Instruction.arg1 );\r
+\r
+ } else {\r
+\r
+ // It's a little convoluted how we get the\r
+ // information back from TAvr::AdjustArg about\r
+ // whether to us "X", "X+", or "-X". In this\r
+ // arg_format is 'X'. We differentiate by setting\r
+ // the value of arg (which is an (unsigned short))\r
+ // to one of ' ', '+', or '-'.\r
+ switch( (char)Instruction.arg1 ){\r
+\r
+ case ' ':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %c",\r
+ temp_string2,\r
+ Instruction.arg1_format );\r
+\r
+ break;\r
+\r
+ case '+':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %c+",\r
+ temp_string2,\r
+ Instruction.arg1_format );\r
+\r
+ break;\r
+\r
+ case '-':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, -%c",\r
+ temp_string2,\r
+ Instruction.arg1_format );\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has special arg1_format: '%c'\n"\r
+ "\twith unknown arg1 of: 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg1_format,\r
+ Instruction.arg1 );\r
+ \r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+ }\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has unknown arg1_format: '%c'\n"\r
+ "\targ1 is 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg1_format,\r
+ Instruction.arg1 );\r
+\r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+ } // end "switch( Instruction.arg1_format )"\r
+\r
+ } // end else part of "if( Arg_longCall == Instruction.arg1_type )"\r
+\r
+ // We'll make it line up pretty assuming 8 space tabs. I'm\r
+ // taking a chance here and making the code as a whole a little\r
+ // longer to try to decouple this process from the rest of this\r
+ // function.\r
+ pLastTab = rindex( temp_string, '\t' );\r
+\r
+ if( index( temp_string, '\t' ) == pLastTab ){\r
+\r
+ // There is only one tab. Therefore this is a simple\r
+ // instruction with no arguments. Since none of these are\r
+ // 8 or more characters long, we know we haven't advanced\r
+ // the hypothetical cursor to the args column yet.\r
+ // Therefore we know that we need 3 tabs.\r
+ tabs = "\t\t\t";\r
+\r
+ } else if( 8 > strlen ( pLastTab + 1 ) ){\r
+\r
+ // This is a short set of arguments. We need 2 tabs to get\r
+ // into the comments column.\r
+ tabs = "\t\t";\r
+\r
+ } else {\r
+\r
+ // This is a long set of arguments. We need 1 tab to get\r
+ // into the comments column.\r
+ tabs = "\t";\r
+ }\r
+\r
+ // Add the address and possibly the destination.\r
+ if( have_dest ){\r
+\r
+ sprintf(\r
+ temp_string2,\r
+ "%s%s; %04X, Dest: %04X",\r
+ temp_string,\r
+ tabs,\r
+ op_code_addr,\r
+ dest );\r
+\r
+ } else {\r
+\r
+ sprintf(\r
+ temp_string2,\r
+ "%s%s; %04X",\r
+ temp_string,\r
+ tabs,\r
+ op_code_addr );\r
+ }\r
+\r
+ pSourceString_tail =\r
+ new TSourceString( temp_string2, pSourceString_tail );\r
+\r
+ if ( NULL == pSourceString_head ){\r
+ pSourceString_head = pSourceString_tail;\r
+ }\r
+\r
+ } // end while( 0 != ( Index = Avr.Word2Instruction\r
+\r
+ line_count = 0;\r
+ if( pSourceString_head ){\r
+\r
+ // We were able to match the opcode to an instruction.\r
+\r
+ if( pSourceString_head->next && !last_line_was_blank ){\r
+ // There is more than one equavalent source strings that\r
+ // can make this opcode. Put in a blank line to seperate\r
+ // these equivalent source strings from the other source.\r
+ push_body( "" );\r
+ }\r
+\r
+ while( pSourceString_head ){\r
+\r
+ if ( 0 == line_count ){\r
+ strcpy( temp_string, pSourceString_head->string );\r
+ } else {\r
+ sprintf(\r
+ temp_string,\r
+ "\t;%s",\r
+ pSourceString_head->string + 1 );\r
+ }\r
+\r
+ push_body( temp_string );\r
+ pSourceString_temp = pSourceString_head->next;\r
+ delete pSourceString_head;\r
+ pSourceString_head = pSourceString_temp;\r
+\r
+ line_count++;\r
+ }\r
+\r
+ if ( 1 < line_count ){\r
+\r
+ // There was more than one line in this block.\r
+ // Put out a blank line.\r
+ last_line_was_blank = TRUE;\r
+ push_body( "" );\r
+\r
+ } else {\r
+\r
+ last_line_was_blank = FALSE;\r
+ }\r
+\r
+ } else {\r
+\r
+ // No instruction matched this opcode. Print it as data.\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\tdc.W\t0x%04X\t\t; %04X",\r
+ code_word,\r
+ op_code_addr );\r
+\r
+ push_body( temp_string );\r
+ last_line_was_blank = FALSE;\r
+ }\r
+\r
+ } else {\r
+\r
+ look_for_new_segment = TRUE;\r
+\r
+ }\r
+ }\r
+\r
+ while( prolog_head ){\r
+ fputs( prolog_head->string, pOutFile );\r
+ fputc( '\n', pOutFile );\r
+ pSourceString_temp = prolog_head->next;\r
+ delete prolog_head;\r
+ prolog_head = pSourceString_temp;\r
+ }\r
+\r
+ while( body_head ){\r
+ fputs( body_head->string, pOutFile );\r
+ fputc( '\n', pOutFile );\r
+ pSourceString_temp = body_head->next;\r
+ delete body_head;\r
+ body_head = pSourceString_temp;\r
+ }\r
+}\r
+\r
+void TSourceOut::push_prolog( const char* s){\r
+\r
+ prolog_tail = new TSourceString( s, prolog_tail );\r
+\r
+ if( NULL == prolog_head ){\r
+ prolog_head = prolog_tail;\r
+ }\r
+}\r
+\r
+void TSourceOut::push_body( const char* s){\r
+\r
+ body_tail = new TSourceString( s, body_tail );\r
+\r
+ if( NULL == body_head ){\r
+ body_head = body_tail;\r
+ }\r
+}\r
+\r
+TSourceOut::TSourceString::TSourceString(\r
+ const char* s,\r
+ TSourceString* previous ){\r
+\r
+ strncpy( string, s, 79 ); // FIXME - magic number\r
+ string[ 79 ] = '\0';\r
+\r
+ if( NULL != previous )\r
+ previous->next = this;\r
+\r
+ next = NULL;\r
+}\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Source.C, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+\r
+ CHANGES:\r
+ 14-Mar-2001, Dan Winker\r
+ Added op_code_addr. See Bug_0001 in CHANGES.\r
+*/\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+#include "Avr.h"\r
+#include "Error.h"\r
+#include "Flash.h"\r
+#include "Source.h"\r
+\r
+#define FALSE 0\r
+#define TRUE (!FALSE)\r
+\r
+//#define DEBUG\r
+\r
+TSourceOut::TSourceOut( const char* OutFile, TFlash* pFlash ){\r
+ TAvr Avr;\r
+ TAvr::TInstruction Instruction;\r
+ int Index;\r
+ int line_count;\r
+ FILE* pOutFile;\r
+ TSourceString* pSourceString_temp;\r
+ TSourceString* pSourceString_head;\r
+ TSourceString* pSourceString_tail;\r
+ int last_line_was_blank = FALSE;\r
+ int look_for_new_segment = TRUE;\r
+ int code_seg_num = 0;\r
+ unsigned short code_word;\r
+ unsigned short temp_short;\r
+ unsigned long temp_long;\r
+ int addr;\r
+ int op_code_addr;\r
+ int dest = 0;\r
+ int have_dest;\r
+ int high_byte_written;\r
+ int low_byte_written;\r
+ char temp_string[ 80 ]; // FIXME - Magic Number\r
+ char temp_string2[ 80 ]; // FIXME - Magic Number\r
+ char* pLastTab;\r
+ char* tabs;\r
+\r
+ prolog_head = NULL;\r
+ prolog_tail = NULL;\r
+ body_head = NULL;\r
+ body_tail = NULL;\r
+\r
+ if( 0 == strcmp( "stdout", OutFile ) ){\r
+ pOutFile = stdout;\r
+ } else {\r
+ pOutFile = fopen( OutFile, "w" );\r
+ }\r
+\r
+ if( NULL == pOutFile )\r
+ throw TFileError( "Cannot open file for writing:", OutFile );\r
+\r
+ // FIXME - This probably doesn't belong burried deep withing a function.\r
+ // This probably should be much more configurable.\r
+ push_prolog( "#arch AT90S8515" );\r
+ push_prolog( "#include \"avr.inc\"" );\r
+\r
+ for( addr = 0; addr < FLASH_SIZE; addr += 2 ){\r
+\r
+ // Sometimes addr will get bumped because of a double word\r
+ // instruction, but we still want to report the address of the\r
+ // first word of the instruction. op_code_addr is what is\r
+ // reported.\r
+ op_code_addr = addr;\r
+\r
+ code_word = pFlash->get_flash_word(\r
+ addr,\r
+ &high_byte_written,\r
+ &low_byte_written );\r
+\r
+ #ifdef DEBUG_1\r
+ printf( "DEBUG - SourceOut: ##############################\n" );\r
+ printf( "DEBUG - SourceOut: addr = %04X\n", addr );\r
+ printf( "DEBUG - SourceOut: code_word = %04X\n", code_word );\r
+ printf( "DEBUG - SourceOut: high_byte_written = %04X\n", high_byte_written );\r
+ printf( "DEBUG - SourceOut: low_byte_written = %04X\n", low_byte_written );\r
+ #endif\r
+\r
+ if( high_byte_written != low_byte_written ){\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut: Word Address: %04X: high_byte_written != low_byte_written.",\r
+ addr );\r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+\r
+ if( high_byte_written ){\r
+\r
+ if( look_for_new_segment ){\r
+ #ifdef DEBUG\r
+ printf( "DEBUG - SourceOut: Need Org Statement For: %04X\n", addr );\r
+ #endif\r
+\r
+ sprintf( temp_string, "\tseg abs=0x%X flash.code%d", addr, code_seg_num );\r
+ push_body( "" );\r
+ push_body( temp_string );\r
+ push_body( "" );\r
+ last_line_was_blank = TRUE;\r
+\r
+ code_seg_num++;\r
+ look_for_new_segment = FALSE;\r
+ }\r
+\r
+ // First Time Through\r
+ pSourceString_head = NULL;\r
+ pSourceString_tail = NULL;\r
+ Index = 0;\r
+ while( 0 != ( Index = Avr.Word2Instruction(\r
+ &Instruction,\r
+ code_word,\r
+ Index ))){\r
+\r
+ #ifdef DEBUG\r
+ printf( "DEBUG - SourceOut: Index = %d\n", Index);\r
+ printf( "DEBUG - SourceOut: Addr:OpCode = %04X:%04X\n", addr, code_word );\r
+ printf( "DEBUG - SourceOut: Instruction.name = %s\n", Instruction.name );\r
+ printf( "DEBUG - SourceOut: Instruction.arg0_format = %c\n", Instruction.arg0_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg1_format = %c\n", Instruction.arg1_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg0_type = %d\n", Instruction.arg0_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg1_type = %d\n", Instruction.arg1_format );\r
+ printf( "DEBUG - SourceOut: Instruction.arg0 = %04X\n", Instruction.arg0 );\r
+ printf( "DEBUG - SourceOut: Instruction.arg1 = %04X\n", Instruction.arg1 );\r
+ #endif\r
+\r
+ have_dest = FALSE;\r
+\r
+ if( TAvr::ARG_longCall == Instruction.arg0_type ){\r
+\r
+ // These arg types are special because they also use the\r
+ // next word as part of the opcode.\r
+\r
+ // A really paranoid programmer would do a bounds check\r
+ // on addr here.\r
+ addr += 2;\r
+ temp_short = pFlash->get_flash_word(\r
+ addr,\r
+ &high_byte_written,\r
+ &low_byte_written );\r
+\r
+ if( !high_byte_written || !low_byte_written ){\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut: Word Address: %04X: Needed Entire Word Written",\r
+ addr );\r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ temp_long =\r
+ ( (unsigned long)Instruction.arg0 << 16 ) |\r
+ ( (unsigned long)temp_short );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t0x%04lX",\r
+ Instruction.name,\r
+ temp_long );\r
+\r
+ } else if(\r
+ TAvr::ARG_neg64_63 == Instruction.arg0_type ||\r
+ TAvr::ARG_neg2KB_2KB == Instruction.arg0_type ) {\r
+\r
+ // We insist that arg types of ARG_neg64_63 and\r
+ // ARG_neg2KB_2KB have an arg format of 'k'.\r
+ if( 'k' != Instruction.arg0_format ){\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruciton has arg0_type = ARG_neg64_63 or ARG_neg2KB_2KB\n"\r
+ "\twith 'k' != ( arg0_format = '%c' )",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+ \r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ // We also insist that arg0 types of ARG_neg64_63 and\r
+ // ARG_neg2KB_2KB do not have an arg1.\r
+ if( TAvr::ARG_none != Instruction.arg1_type ){\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruciton has arg0_type = ARG_neg64_63 or ARG_neg2KB_2KB\n"\r
+ "\twith ARG_none != arg1_type",\r
+ Instruction.name );\r
+ \r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%d",\r
+ Instruction.name,\r
+ (short)Instruction.arg0 );\r
+\r
+ have_dest = TRUE;\r
+#if 1 /* Nick */\r
+ dest = addr; /* + 1 + (short)Instruction.arg0; */\r
+#else\r
+ dest = addr + 2 + (short)Instruction.arg0;\r
+#endif\r
+\r
+ } else {\r
+\r
+ switch( Instruction.arg0_format ){\r
+\r
+ case '\0':\r
+\r
+ // No args to this instruction\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s",\r
+ Instruction.name );\r
+\r
+ break;\r
+\r
+ case 'd':\r
+ case 'r':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\tr%d",\r
+ Instruction.name,\r
+ Instruction.arg0 );\r
+\r
+ break;\r
+\r
+ case 'k':\r
+ case 's':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%d",\r
+ Instruction.name,\r
+ (short)Instruction.arg0 );\r
+\r
+ break;\r
+\r
+ case 'P':\r
+ case 'p':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t0x%X",\r
+ Instruction.name,\r
+ Instruction.arg0 );\r
+\r
+ break;\r
+\r
+ case 'X':\r
+ case 'Y':\r
+ case 'Z':\r
+\r
+ if( 0 == strcmp( "std", Instruction.name )){\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%c+%d",\r
+ Instruction.name,\r
+ Instruction.arg0_format,\r
+ Instruction.arg0 );\r
+\r
+ } else {\r
+\r
+ // It's a little convoluted how we get the\r
+ // information back from TAvr::AdjustArg about\r
+ // whether to us "X", "X+", or "-X". In this\r
+ // arg_format is 'X'. We differentiate by\r
+ // setting the value of arg (which is an\r
+ // (unsigned short)) to one of ' ', '+' or '-'.\r
+ switch( (char)Instruction.arg0 ){\r
+\r
+ case ' ':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%c",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+\r
+ break;\r
+\r
+ case '+':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t%c+",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+\r
+ break;\r
+\r
+ case '-':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\t%s\t-%c",\r
+ Instruction.name,\r
+ Instruction.arg0_format );\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has special arg0_format: '%c'\n"\r
+ "\twith unknown arg0 of: 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg0_format,\r
+ Instruction.arg0 );\r
+ \r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+\r
+ }\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has unknown arg0_format: '%c'\n"\r
+ "\targ0 is 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg0_format,\r
+ Instruction.arg0 );\r
+\r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+\r
+ } // end "switch( Instruction.arg0_format )"\r
+\r
+ } // end else part of "if( Arg_longCall == Instruction.arg0_type )"\r
+\r
+ if( TAvr::ARG_longCall == Instruction.arg1_type ){\r
+\r
+ // These arg types are special because they also use the\r
+ // next word as part of the opcode.\r
+\r
+ // A really paranoid programmer would do a bounds check\r
+ // on addr here.\r
+ addr += 2;\r
+ temp_short = pFlash->get_flash_word(\r
+ addr,\r
+ &high_byte_written,\r
+ &low_byte_written );\r
+\r
+\r
+ if( !high_byte_written || !low_byte_written ){\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut: Word Address: %04X: Needed Entire Word Written",\r
+ addr );\r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ temp_long =\r
+ ( (unsigned long)Instruction.arg1 << 16 ) |\r
+ ( (unsigned long)temp_short );\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, 0x%04lX",\r
+ temp_string2,\r
+ temp_long );\r
+\r
+ } else if( TAvr::ARG_neg64_63 == Instruction.arg1_type ) {\r
+\r
+ // We insist that an ARG_neg64_63 arg type have\r
+ // an arg format of 'k'.\r
+ if( 'k' != Instruction.arg1_format ){\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruciton has arg1_type = ARG_neg64_63\n"\r
+ "\twith 'k' != ( arg1_format = '%c' )",\r
+ Instruction.name,\r
+ Instruction.arg1_format );\r
+ \r
+ throw TGenericError( temp_string ); \r
+ }\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %d",\r
+ temp_string2,\r
+ (short)Instruction.arg1 );\r
+\r
+ have_dest = TRUE;\r
+ dest = addr + 2 + (short)Instruction.arg1;\r
+\r
+ } else {\r
+\r
+ switch( Instruction.arg1_format ){\r
+\r
+ case '\0':\r
+ // No arg1 to this instruction. No more to do.\r
+ break;\r
+\r
+ case 'b':\r
+ case 'k':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %d",\r
+ temp_string2,\r
+ (short)Instruction.arg1 );\r
+\r
+ break;\r
+\r
+ case 'd':\r
+ case 'r':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, r%d",\r
+ temp_string2,\r
+ Instruction.arg1 );\r
+\r
+ break;\r
+\r
+ case 'K':\r
+ case 'P':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, 0x%X",\r
+ temp_string2,\r
+ Instruction.arg1 );\r
+\r
+ break;\r
+\r
+ case 'X':\r
+ case 'Y':\r
+ case 'Z':\r
+\r
+ strcpy( temp_string2, temp_string );\r
+\r
+ if( 0 == strcmp( "ldd", Instruction.name )){\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %c+%d",\r
+ temp_string2,\r
+ Instruction.arg1_format,\r
+ Instruction.arg1 );\r
+\r
+ } else {\r
+\r
+ // It's a little convoluted how we get the\r
+ // information back from TAvr::AdjustArg about\r
+ // whether to us "X", "X+", or "-X". In this\r
+ // arg_format is 'X'. We differentiate by setting\r
+ // the value of arg (which is an (unsigned short))\r
+ // to one of ' ', '+', or '-'.\r
+ switch( (char)Instruction.arg1 ){\r
+\r
+ case ' ':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %c",\r
+ temp_string2,\r
+ Instruction.arg1_format );\r
+\r
+ break;\r
+\r
+ case '+':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, %c+",\r
+ temp_string2,\r
+ Instruction.arg1_format );\r
+\r
+ break;\r
+\r
+ case '-':\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "%s, -%c",\r
+ temp_string2,\r
+ Instruction.arg1_format );\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has special arg1_format: '%c'\n"\r
+ "\twith unknown arg1 of: 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg1_format,\r
+ Instruction.arg1 );\r
+ \r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+ }\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "TSourceOut:\n"\r
+ "\t%s instruction has unknown arg1_format: '%c'\n"\r
+ "\targ1 is 0x%X",\r
+ Instruction.name,\r
+ Instruction.arg1_format,\r
+ Instruction.arg1 );\r
+\r
+ throw TGenericError( temp_string ); \r
+\r
+ break;\r
+ } // end "switch( Instruction.arg1_format )"\r
+\r
+ } // end else part of "if( Arg_longCall == Instruction.arg1_type )"\r
+\r
+ // We'll make it line up pretty assuming 8 space tabs. I'm\r
+ // taking a chance here and making the code as a whole a little\r
+ // longer to try to decouple this process from the rest of this\r
+ // function.\r
+ pLastTab = rindex( temp_string, '\t' );\r
+\r
+ if( index( temp_string, '\t' ) == pLastTab ){\r
+\r
+ // There is only one tab. Therefore this is a simple\r
+ // instruction with no arguments. Since none of these are\r
+ // 8 or more characters long, we know we haven't advanced\r
+ // the hypothetical cursor to the args column yet.\r
+ // Therefore we know that we need 3 tabs.\r
+ tabs = "\t\t\t";\r
+\r
+ } else if( 8 > strlen ( pLastTab + 1 ) ){\r
+\r
+ // This is a short set of arguments. We need 2 tabs to get\r
+ // into the comments column.\r
+ tabs = "\t\t";\r
+\r
+ } else {\r
+\r
+ // This is a long set of arguments. We need 1 tab to get\r
+ // into the comments column.\r
+ tabs = "\t";\r
+ }\r
+\r
+ // Add the address and possibly the destination.\r
+ if( have_dest ){\r
+\r
+ sprintf(\r
+ temp_string2,\r
+ "%s%s; %04X, Dest: %04X",\r
+ temp_string,\r
+ tabs,\r
+ op_code_addr,\r
+ dest );\r
+\r
+ } else {\r
+\r
+ sprintf(\r
+ temp_string2,\r
+ "%s%s; %04X",\r
+ temp_string,\r
+ tabs,\r
+ op_code_addr );\r
+ }\r
+\r
+ pSourceString_tail =\r
+ new TSourceString( temp_string2, pSourceString_tail );\r
+\r
+ if ( NULL == pSourceString_head ){\r
+ pSourceString_head = pSourceString_tail;\r
+ }\r
+\r
+ } // end while( 0 != ( Index = Avr.Word2Instruction\r
+\r
+ line_count = 0;\r
+ if( pSourceString_head ){\r
+\r
+ // We were able to match the opcode to an instruction.\r
+\r
+ if( pSourceString_head->next && !last_line_was_blank ){\r
+ // There is more than one equavalent source strings that\r
+ // can make this opcode. Put in a blank line to seperate\r
+ // these equivalent source strings from the other source.\r
+ push_body( "" );\r
+ }\r
+\r
+ while( pSourceString_head ){\r
+\r
+ if ( 0 == line_count ){\r
+ strcpy( temp_string, pSourceString_head->string );\r
+ } else {\r
+ sprintf(\r
+ temp_string,\r
+ "\t;%s",\r
+ pSourceString_head->string + 1 );\r
+ }\r
+\r
+ push_body( temp_string );\r
+ pSourceString_temp = pSourceString_head->next;\r
+ delete pSourceString_head;\r
+ pSourceString_head = pSourceString_temp;\r
+\r
+ line_count++;\r
+ }\r
+\r
+ if ( 1 < line_count ){\r
+\r
+ // There was more than one line in this block.\r
+ // Put out a blank line.\r
+ last_line_was_blank = TRUE;\r
+ push_body( "" );\r
+\r
+ } else {\r
+\r
+ last_line_was_blank = FALSE;\r
+ }\r
+\r
+ } else {\r
+\r
+ // No instruction matched this opcode. Print it as data.\r
+\r
+ sprintf(\r
+ temp_string,\r
+ "\tdc.W\t0x%04X\t\t; %04X",\r
+ code_word,\r
+ op_code_addr );\r
+\r
+ push_body( temp_string );\r
+ last_line_was_blank = FALSE;\r
+ }\r
+\r
+ } else {\r
+\r
+ look_for_new_segment = TRUE;\r
+\r
+ }\r
+ }\r
+\r
+ while( prolog_head ){\r
+ fputs( prolog_head->string, pOutFile );\r
+ fputc( '\n', pOutFile );\r
+ pSourceString_temp = prolog_head->next;\r
+ delete prolog_head;\r
+ prolog_head = pSourceString_temp;\r
+ }\r
+\r
+ while( body_head ){\r
+ fputs( body_head->string, pOutFile );\r
+ fputc( '\n', pOutFile );\r
+ pSourceString_temp = body_head->next;\r
+ delete body_head;\r
+ body_head = pSourceString_temp;\r
+ }\r
+}\r
+\r
+void TSourceOut::push_prolog( const char* s){\r
+\r
+ prolog_tail = new TSourceString( s, prolog_tail );\r
+\r
+ if( NULL == prolog_head ){\r
+ prolog_head = prolog_tail;\r
+ }\r
+}\r
+\r
+void TSourceOut::push_body( const char* s){\r
+\r
+ body_tail = new TSourceString( s, body_tail );\r
+\r
+ if( NULL == body_head ){\r
+ body_head = body_tail;\r
+ }\r
+}\r
+\r
+TSourceOut::TSourceString::TSourceString(\r
+ const char* s,\r
+ TSourceString* previous ){\r
+\r
+ strncpy( string, s, 79 ); // FIXME - magic number\r
+ string[ 79 ] = '\0';\r
+\r
+ if( NULL != previous )\r
+ previous->next = this;\r
+\r
+ next = NULL;\r
+}\r
--- /dev/null
+/*\r
+ Program: revava - Atmel Dis-Assembler\r
+ File: Source.h, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#ifndef __SOURCE\r
+#define __SOURCE\r
+\r
+#include "Flash.h"\r
+\r
+class TSourceOut{\r
+\r
+ public:\r
+\r
+ TSourceOut( const char* OutFile, TFlash* pFlash );\r
+ ~TSourceOut ();\r
+\r
+ void push_prolog( const char* s );\r
+ void push_body ( const char* s );\r
+ // void push_epilog( const char* s );\r
+\r
+ private:\r
+\r
+ class TSourceString{\r
+ public:\r
+ TSourceString( const char* s, TSourceString* previous );\r
+ ~TSourceString(){}\r
+ TSourceString* next;\r
+ char string[ 80 ]; // FIXME - magic number\r
+ };\r
+\r
+ TSourceString* prolog_head;\r
+ TSourceString* prolog_tail;\r
+ TSourceString* body_head;\r
+ TSourceString* body_tail;\r
+ // TSourceString* epilog_head;\r
+ // TSourceString* epilog_tail;\r
+};\r
+\r
+#endif\r
--- /dev/null
+Many "FIXME"s in the source code. Mostly for using hard coded numbers\r
+to set the size of strings. This would be easy to fix.\r
+\r
+Right now revava only handles Intel Hex as an object file format (input\r
+to this program). At the very least it should also handle Motorola\r
+S-Record files and uAsm files. This would probably be pretty easy to\r
+do.\r
+\r
+Some kind of symbol handling would be nice. Intel Hex files can't carry\r
+symbols, but I think Motorola S-Record files sometimes do. Also it\r
+would be nice if revava could suck in a text symbol file and use it.\r
+\r
+revava should be able to tell where all the jumps go and put in labels\r
+at the code place to jump to and then use that label for all branches,\r
+jumps, calls, etc that reference that address. make_labels.pl is a\r
+kludgy way to do just this. It would be a lot nicer if this\r
+functionality were built into revava itself. That would be a lot of\r
+work.\r
+\r
+A man page and "make install" target in the Makefile would be nice.\r
+\r
+Right now there's no way to take input from stdin. I don't know if\r
+anyone ever would want to do this, but I suppose the option would be\r
+nice.\r
--- /dev/null
+#!/bin/perl -w\r
+##############################################################################\r
+# Program: revava - Atmel Dis-Assembler\r
+# File: make_labels.pl\r
+# Copyright (C) 2001 Daniel J. Winker\r
+#\r
+# This program is free software; you can redistribute it and/or\r
+# modify it under the terms of the GNU General Public License\r
+# as published by the Free Software Foundation; either version 2\r
+# of the License, or (at your option) any later version.\r
+#\r
+# This program is distributed in the hope that it will be useful,\r
+# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+# GNU General Public License for more details.\r
+#\r
+# You should have received a copy of the GNU General Public License\r
+# along with this program; if not, write to the Free Software\r
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+##############################################################################\r
+\r
+use strict ;\r
+\r
+die "usage: $0 infile > outfile\n" if ( 0 != $#ARGV );\r
+open( INFILE, $ARGV[ 0 ] ) or die "$0: Can't open $ARGV[ 0 ]. $!\n";\r
+\r
+my %AddrList;\r
+my %Addr2Func;\r
+my $FuncNum = 0;\r
+my %Addr2Label;\r
+my $LabelNum = 0;\r
+\r
+# Read the file into a buffer because we're going to make several\r
+# passes through it. This will be more efficient.\r
+my @Buf = <INFILE>;\r
+\r
+# First spin through collecting addresses and looking for "Dest"s. We\r
+# will put in function labels or simple labels anywere there is a\r
+# "Dest". This first pass just gets a list of addresses.\r
+LOOP0: foreach( @Buf ){\r
+\r
+ next LOOP0 unless m/; (\w+)/o;\r
+ ++$AddrList{ $1 };\r
+\r
+ if( m/, Dest: (\w+)$/o ){\r
+ my $Address = $1;\r
+\r
+ # Create a cross reference if one does not exist.\r
+ if( m/rcall/o ){\r
+\r
+ # We will call these things that are rcalled "functions".\r
+\r
+ $Addr2Func{ $Address } = "";\r
+\r
+ } else {\r
+\r
+ $Addr2Label{ $Address } = "";\r
+ }\r
+ }\r
+}\r
+\r
+# Now sort the addresses and assign labels in increasing order.\r
+foreach my $Address ( sort keys %Addr2Func ){\r
+ $Addr2Func{ $Address } = sprintf( "Func%03d", $FuncNum++ );\r
+}\r
+\r
+foreach my $Address ( sort keys %Addr2Label ){\r
+ $Addr2Label{ $Address } = sprintf( "L%03d", $LabelNum++ );\r
+}\r
+\r
+# I suppose we wouldn't really have to revisit every single line in the\r
+# source file here, if we would have kept track of the Buf Indexes that\r
+# need updating. Oh well. This is pass 2.\r
+LOOP1: foreach( @Buf ){\r
+\r
+ if( m/^(\s;*\w+\s+)-*[\d]+(\s+; \w+, Dest: (\w+))$/o ||\r
+ m/^(\s;*\w+\s+\d+, )-*[\d]+(\s+; \w+, Dest: (\w+))$/o ){\r
+ my $LineBeg = $1;\r
+ my $LineEnd = $2;\r
+ my $Address = $3;\r
+\r
+ # Check for the existance of a Labelable target\r
+ if( !exists( $AddrList{ $Address } )){\r
+\r
+ # No Labelable target. Mark this line.\r
+ chomp;\r
+ $_ = $_." ##### Dest BOGUS #####\n";\r
+\r
+ # Delete this key so we don't look for the place to put the\r
+ # label later.\r
+\r
+ if( $LineBeg =~ m/rcall/o ){\r
+ delete $Addr2Func{ $Address };\r
+ } else {\r
+ delete $Addr2Label{ $Address };\r
+ }\r
+\r
+ next LOOP1;\r
+\r
+ }\r
+\r
+ # Change the source line to include our new label\r
+ if( $LineBeg =~ m/rcall/o ){\r
+\r
+ $_ = "$LineBeg$Addr2Func{ $Address }$LineEnd\n";\r
+\r
+ } else {\r
+\r
+ $_ = "$LineBeg$Addr2Label{ $Address }$LineEnd\n";\r
+ }\r
+ }\r
+}\r
+\r
+# Now go through and put in the labels. First get a list of function\r
+# addresses and label addresses in order.\r
+my @FuncAddrList = sort keys %Addr2Func;\r
+my $FuncAddress = shift @FuncAddrList;\r
+my @LabelAddrList = sort keys %Addr2Label;\r
+my $LabelAddress = shift @LabelAddrList;\r
+#print "FuncAddrList=@FuncAddrList\nLabelAddrList=@LabelAddrList\n";\r
+\r
+# I guess this is pass 3. Actually, it might be easier to read if this\r
+# pass were split into two seperate passes - one for Func's and one for\r
+# Label's.\r
+LOOP2: for( my $Index = 0; $Index < $#Buf; $Index++ ){\r
+\r
+ next LOOP2 unless $Buf[ $Index ] =~ m/; (\w+)/o;\r
+ my $ThisAddr = $1;\r
+\r
+ $FuncAddress = shift @FuncAddrList if( $FuncAddress and $ThisAddr gt $FuncAddress );\r
+ $LabelAddress = shift @LabelAddrList if( $LabelAddress and $ThisAddr gt $LabelAddress );\r
+\r
+ next LOOP2 if( $FuncAddress and $ThisAddr lt $FuncAddress ) and\r
+ ( $LabelAddress and $ThisAddr lt $LabelAddress );\r
+\r
+ #printf "ThisAddr=%s FuncAddress=%s LabelAddress=%s\n",\r
+ # defined $ThisAddr ? $ThisAddr : "undef",\r
+ # defined $FuncAddress ? $FuncAddress : "undef",\r
+ # defined $LabelAddress ? $LabelAddress : "undef";\r
+\r
+ if( $FuncAddress and $ThisAddr eq $FuncAddress ){\r
+\r
+ #print "Before\n";\r
+ #print "Index - 2 =".( $Index - 2 )." $Buf[ $Index - 2 ]";\r
+ #print "Index - 1 =".( $Index - 1 )." $Buf[ $Index - 1 ]";\r
+ #print "Index =".( $Index + 0 )." $Buf[ $Index + 0 ]";\r
+ #print "Index + 1 =".( $Index + 1 )." $Buf[ $Index + 1 ]";\r
+ #print "Index + 2 =".( $Index + 2 )." $Buf[ $Index + 2 ]";\r
+ #print "Index + 3 =".( $Index + 3 )." $Buf[ $Index + 3 ]";\r
+\r
+ # The outer if is just because I'm paranoid. It would only be false\r
+ # on the first line of the input file which should never even have\r
+ # an address.\r
+ if( $Index ){\r
+\r
+ # If there is a blank line above this, just put in the function\r
+ # label. Otherwise, add a blank line and the function label.\r
+ if( $Buf[ $Index - 1 ] eq "\n" ){\r
+ splice( @Buf, $Index, 0, "$Addr2Func{ $FuncAddress }:\n" );\r
+ $Index += 1;\r
+ } else {\r
+ splice( @Buf, $Index, 0, "\n", "$Addr2Func{ $FuncAddress }:\n" );\r
+ $Index += 2;\r
+ }\r
+\r
+ } else {\r
+ splice( @Buf, $Index, 0, "$Addr2Func{ $FuncAddress }:\n" );\r
+ $Index += 1;\r
+ }\r
+\r
+ #print "After\n";\r
+ #print "Index - 4 =".( $Index - 4 )." $Buf[ $Index - 4 ]";\r
+ #print "Index - 3 =".( $Index - 3 )." $Buf[ $Index - 3 ]";\r
+ #print "Index - 2 =".( $Index - 2 )." $Buf[ $Index - 2 ]";\r
+ #print "Index - 1 =".( $Index - 1 )." $Buf[ $Index - 1 ]";\r
+ #print "Index =".( $Index + 0 )." $Buf[ $Index + 0 ]";\r
+ #print "Index + 1 =".( $Index + 1 )." $Buf[ $Index + 1 ]";\r
+\r
+ $FuncAddress = shift @FuncAddrList;\r
+ }\r
+\r
+ if( $LabelAddress and $ThisAddr eq $LabelAddress ){\r
+\r
+ #print "Before\n";\r
+ #print "Index - 2 =".( $Index - 2 )." $Buf[ $Index - 2 ]";\r
+ #print "Index - 1 =".( $Index - 1 )." $Buf[ $Index - 1 ]";\r
+ #print "Index =".( $Index + 0 )." $Buf[ $Index + 0 ]";\r
+ #print "Index + 1 =".( $Index + 1 )." $Buf[ $Index + 1 ]";\r
+ #print "Index + 2 =".( $Index + 2 )." $Buf[ $Index + 2 ]";\r
+ #print "Index + 3 =".( $Index + 3 )." $Buf[ $Index + 3 ]";\r
+\r
+ # The outer if is just because I'm paranoid. It would only be true\r
+ # on the first line of the input file which should never even have\r
+ # an address.\r
+ if( $Index ){\r
+\r
+ # If there is a blank line above this, just put in the function\r
+ # label. Otherwise, add a blank line and the function label.\r
+ if( $Buf[ $Index - 1 ] eq "\n" ){\r
+ splice( @Buf, $Index, 0, "$Addr2Label{ $LabelAddress }:\n" );\r
+ $Index += 1;\r
+ } else {\r
+ splice( @Buf, $Index, 0, "\n", "$Addr2Label{ $LabelAddress }:\n" );\r
+ $Index += 2;\r
+ }\r
+\r
+ } else {\r
+ splice( @Buf, $Index, 0, "$Addr2Label{ $LabelAddress }:\n" );\r
+ $Index += 1;\r
+ }\r
+\r
+ #print "After\n";\r
+ #print "Index - 4 =".( $Index - 4 )." $Buf[ $Index - 4 ]";\r
+ #print "Index - 3 =".( $Index - 3 )." $Buf[ $Index - 3 ]";\r
+ #print "Index - 2 =".( $Index - 2 )." $Buf[ $Index - 2 ]";\r
+ #print "Index - 1 =".( $Index - 1 )." $Buf[ $Index - 1 ]";\r
+ #print "Index =".( $Index + 0 )." $Buf[ $Index + 0 ]";\r
+ #print "Index + 1 =".( $Index + 1 )." $Buf[ $Index + 1 ]";\r
+\r
+ $LabelAddress = shift @LabelAddrList;\r
+ }\r
+}\r
+\r
+# Pass 4 is the shortest code, but probably the longest time.\r
+# Isn't that funny?\r
+foreach( @Buf ){\r
+ print;\r
+}\r
--- /dev/null
+/*\r
+ Program: make_test_source - Creates test source for revava.\r
+ File: make_test_source.C, Copyright (C) 2001 Daniel J. Winker\r
+\r
+ This program is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU General Public License\r
+ as published by the Free Software Foundation; either version 2\r
+ of the License, or (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/\r
+\r
+#include <stdio.h>\r
+#include <string.h> /* Nick */\r
+#include <stdlib.h> /* Nick */\r
+\r
+#include "Avr.h"\r
+\r
+class TMyAvr : public TAvr{\r
+\r
+ public:\r
+\r
+ void make_test_source( void );\r
+\r
+ private:\r
+\r
+ struct arg_tries {\r
+ char* arg;\r
+ struct arg_tries* prev;\r
+ struct arg_tries* next;\r
+ };\r
+\r
+ void test_instruction( TInstSet* pInstSet );\r
+ struct arg_tries* get_tries( eArgTypes pArgType );\r
+};\r
+\r
+TMyAvr MyAvr;\r
+\r
+int main( void ){\r
+\r
+ MyAvr.make_test_source();\r
+ return 0;\r
+}\r
+\r
+void TMyAvr::make_test_source( void ){\r
+\r
+ TAvr::TInstSet* pInstSet;\r
+\r
+ puts( "#arch AT90S8515" );\r
+ puts( "#include \"avr.inc\"" );\r
+ puts( "" );\r
+ puts( "\tseg abs=0x0 flash.code0" );\r
+ puts( "" );\r
+\r
+ for( pInstSet = TAvr::InstSet; '\0' != pInstSet->opcode[ 0 ]; pInstSet++ ){\r
+ MyAvr.test_instruction( pInstSet );\r
+ }\r
+\r
+ // The last two are "call" and "jmp" which are not defined in this model.\r
+ puts( "" );\r
+ puts( "\tseg abs=0x1000 flash.code1" );\r
+ puts( "" );\r
+ puts( "\tdc.W\t0xFFFF" );\r
+ puts( "\tdc.W\t0x940E" );\r
+ puts( "\tdc.W\t0x940C" );\r
+}\r
+\r
+void TMyAvr::test_instruction( TAvr::TInstSet* pInstSet ){\r
+\r
+ struct arg_tries* pt0;\r
+ struct arg_tries* pt1;\r
+ struct arg_tries* pt_temp;\r
+ char format_string[ 40 ];\r
+\r
+ if( ARG_none == pInstSet->arg0_type ){\r
+\r
+ // There can be no arg1\r
+ printf( "\t%s\n", pInstSet->name );\r
+\r
+ } else if( ARG_none == pInstSet->arg1_type || ARG_copyArg == pInstSet->arg1_type ) {\r
+\r
+ // There is an arg0, but no arg1\r
+ pt0 = get_tries( pInstSet->arg0_type );\r
+\r
+ switch( pInstSet->arg[ 0 ] ){\r
+\r
+ case 'd':\r
+ strcpy( format_string, "\t%s\tr%s\n" );\r
+ break;\r
+\r
+ case 'k':\r
+ case 's':\r
+ strcpy( format_string, "\t%s\t%s\n" );\r
+ break;\r
+\r
+ default:\r
+ fprintf( stderr, "Bad Error 10: arg0 of %s is type '%c'\n", pInstSet->name, pInstSet->arg[ 0 ] );\r
+ exit( 1 );\r
+ break;\r
+ }\r
+\r
+ while( pt0 ){\r
+\r
+ printf(\r
+ format_string,\r
+ pInstSet->name,\r
+ pt0->arg );\r
+\r
+ pt_temp = pt0;\r
+ pt0 = pt0->next;\r
+ delete pt_temp;\r
+ }\r
+\r
+ } else {\r
+\r
+ // This is both an arg0 and an arg1\r
+ pt0 = get_tries( pInstSet->arg0_type );\r
+\r
+ switch( pInstSet->arg[ 0 ] ){\r
+\r
+ case 'd':\r
+ case 'r':\r
+ strcpy( format_string, "\t%s\tr%s" );\r
+ break;\r
+\r
+ case 'K':\r
+ case 'P':\r
+ case 'p':\r
+ case 's':\r
+ strcpy( format_string, "\t%s\t%s" );\r
+ break;\r
+\r
+ case 'X':\r
+ case 'Y':\r
+ case 'Z':\r
+\r
+ if( 0 == strcmp( "std", pInstSet->name )){\r
+ sprintf(\r
+ format_string,\r
+ "\t%%s\t%c+%%s",\r
+ pInstSet->arg[ 0 ] );\r
+ }\r
+ else {\r
+ strcpy( format_string, "\t%s\t%s" );\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+ fprintf( stderr, "Bad Error 11: arg0 of %s is type '%c'\n", pInstSet->name, pInstSet->arg[ 0 ] );\r
+ exit( 1 );\r
+ break;\r
+ }\r
+\r
+ switch( pInstSet->arg[ 1 ] ){\r
+\r
+ case 'd':\r
+ case 'r':\r
+ sprintf( format_string, "%s, r%%s\n", format_string );\r
+ break;\r
+\r
+ case 'K':\r
+ case 'P':\r
+ case 'b':\r
+ case 'k':\r
+ sprintf( format_string, "%s, %%s\n", format_string );\r
+ break;\r
+\r
+ case 'X':\r
+ case 'Y':\r
+ case 'Z':\r
+\r
+ if( 0 == strcmp( "ldd", pInstSet->name )){\r
+ sprintf(\r
+ format_string,\r
+ "%s, %c+%%s\n",\r
+ format_string,\r
+ pInstSet->arg[ 1 ] );\r
+ }\r
+ else {\r
+ sprintf(\r
+ format_string,\r
+ "%s, %%s\n",\r
+ format_string );\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+ fprintf( stderr, "Bad Error 12: arg1 of %s is type '%c'\n", pInstSet->name, pInstSet->arg[ 1 ] );\r
+ exit( 1 );\r
+ break;\r
+ }\r
+\r
+ while( pt0 ){\r
+\r
+ pt1 = MyAvr.get_tries( pInstSet->arg1_type );\r
+\r
+ while( pt1 ){\r
+\r
+ printf(\r
+ format_string,\r
+ pInstSet->name,\r
+ pt0->arg,\r
+ pt1->arg );\r
+\r
+ pt_temp = pt1;\r
+ pt1 = pt1->next;\r
+ delete pt_temp;\r
+ }\r
+\r
+ pt_temp = pt0;\r
+ pt0 = pt0->next;\r
+ delete pt_temp;\r
+ }\r
+ }\r
+}\r
+\r
+struct TMyAvr::arg_tries* TMyAvr::get_tries( TAvr::eArgTypes ArgType ){\r
+\r
+ arg_tries* pt = NULL;\r
+ arg_tries* pt_temp = NULL;\r
+\r
+ switch( ArgType ){\r
+\r
+ case ARG_none:\r
+ case ARG_copyArg:\r
+\r
+ pt = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_0_31:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "0";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "15";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "31";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_0_7:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "0";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "4";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "7";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_0_63:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "0x0";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0x20";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0x3F";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_16_31:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "16";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "24";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "31";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_0_255:\r
+ case ARG_cm0_cm255:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "0x0";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0x7F";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0xFF";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_neg64_63:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "-64";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "62";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_neg2KB_2KB:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "-2048";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "2048";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_24_26_28_30:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "24";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "30";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_longCall:\r
+\r
+ pt = new arg_tries;\r
+ pt_temp = pt;\r
+ pt_temp->arg = "0x0000";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0x8000";\r
+\r
+ pt_temp->next = new arg_tries;\r
+ pt_temp = pt_temp->next;\r
+ pt_temp->arg = "0xFFFF";\r
+\r
+ pt_temp->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialX:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "X";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialIncX:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "X+";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialDecX:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "-X";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialY:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "Y";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialIncY:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "Y+";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialDecY:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "-Y";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialZ:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "Z";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialIncZ:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "Z+";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ case ARG_specialDecZ:\r
+\r
+ pt = new arg_tries;\r
+ pt->arg = "-Z";\r
+ pt->next = NULL;\r
+\r
+ break;\r
+\r
+ default:\r
+ fputs( "Bad Error 2\n", stderr );\r
+ exit( 1 );\r
+ break;\r
+ }\r
+\r
+ return( pt );\r
+}\r
--- /dev/null
+make CPPFLAGS="-DDEBUG"
+copy revava.exe ..\..\bin
--- /dev/null
+make
+copy revava.exe ..\..\bin
--- /dev/null
+# GCC-AVR standard makefile\r
+# Based on AVRfreaks.net January 2000 sample makefile\r
+# For compilation under Microsoft Windows environment\r
+\r
+# Variables definitions\r
+ CC = avr-gcc\r
+ AS = avr-gcc -x assembler-with-cpp \r
+ RM = rm -f\r
+ RN = mv\r
+ BIN = avr-objcopy\r
+ SIZE = avr-size\r
+ INCDIR = .\r
+ LIBDIR = avr/lib\r
+ SHELL = sh.exe\r
+\r
+# Output format (srec or ihex, avrobj is always created)\r
+ FORMAT = ihex \r
+\r
+# Project specific object files\r
+ OBJ = $(ASRC:.s=.o) $(SRC:.c=.o) \r
+ CPFLAGS += -mmcu=$(MCU)\r
+ ASFLAGS += -mmcu=$(MCU)\r
+ LDFLAGS += -mmcu=$(MCU)\r
+ \r
+# Define make process\r
+\r
+#all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok \r
+all: $(TRG).s $(TRG).elf $(TRG).hex $(TRG).eep $(TRG).ok\r
+%.o : %.c \r
+ $(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.s : %.c\r
+ $(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@\r
+%.o : %.s\r
+ $(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@\r
+%.elf: $(OBJ)\r
+ $(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@\r
+%.obj: %.elf\r
+ $(BIN) -O avrobj -R .eeprom $< $@\r
+%.rom: %.elf\r
+ $(BIN) -O $(FORMAT) -R .eeprom $< $@\r
+#%.eep: %.elf\r
+# $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.eep: %.elf\r
+ $(BIN) -j .eeprom --set-section-flags .eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@\r
+%.hex: %.elf\r
+ $(BIN) -O ihex $< $@\r
+\r
+# No error message if successfully compiled\r
+%ok:\r
+ @echo "Errors: none" \r
+\r
+# Clean up directory\r
+clean:\r
+ $(RM) $(OBJ)\r
+ $(RM) $(SRC:.c=.s)\r
+ $(RM) $(SRC:.c=.lst)\r
+ $(RM) $(TRG).map\r
+ $(RM) $(TRG).elf\r
+\r
+ $(RM) $(TRG).obj\r
+ $(RM) $(TRG).a90\r
+ $(RM) $(TRG).hex \r
+ $(RM) *.bak\r
+ $(RM) *.log\r
+ \r
+size:\r
+ $(SIZE) $(TRG).elf\r
+ \r
--- /dev/null
+/* hello.c by Nick for Hytech AVR */
+
+#include <stdio.h>
+#include <avr/io.h>
+#include "hello.h"
+
+int my_putc(char c)
+ {
+ while (bit_is_set(UCSRA, UDRE) == 0)
+ ;
+ UDR = c;
+ return 0;
+ }
+
+int my_getc(void)
+ {
+ if (bit_is_set(UCSRA, RXC) == 0)
+ return -1;
+ return UDR;
+ }
+
+int main(void)
+ {
+ /* initialise the AVR's built-in UART for 9600 bps */
+ UCSRA = _BV(TXC);
+ UCSRB = _BV(TXEN) | _BV(RXEN);
+ UBRR = 71;
+ /* UBRRH = 0; */ /* = (11059200 / (9600 * 16)) - 1 */
+
+#if 0
+ /* send a demo message to ISPD via the AVR's UART */
+ my_putc('h');
+ my_putc('e');
+ my_putc('l');
+ my_putc('l');
+ my_putc('o');
+#else
+ /* setup the standard input, output and error streams */
+ fdevopen(my_putc, my_getc, 0);
+
+ /* send a demo message to ISPD via the AVR's UART */
+ printf("hello, world\r\n");
+#endif
+
+ /* enter an infinite loop as we can never exit */
+ while (1)
+ ;
+ }
+
--- /dev/null
+:00000001FF\r
--- /dev/null
+/* hello.h by Nick for Hytech AVR */
+
+int my_putc(char c);
+int my_getc(void);
+int main(void);
+
--- /dev/null
+:100000000DC027C026C025C024C023C022C021C0E7\r
+:1000100020C01FC01EC01DC01CC01BC011241FBE9D\r
+:10002000CFEDD0E0DEBFCDBF10E0A0E6B0E0EAE665\r
+:10003000FAE003C0C89531960D92A637B107D1F703\r
+:1000400010E0A6E7B0E001C01D92A038B107E1F7CB\r
+:1000500044C0D6CFCF93DF93CDB7DEB721970FB68D\r
+:10006000F894DEBF0FBECDBF898380912B00992706\r
+:10007000807290700097C9F3898180932C0080E092\r
+:1000800090E021960FB6F894DEBF0FBECDBFDF9192\r
+:10009000CF910895CF93DF93CDB7DEB722970FB6F8\r
+:1000A000F894DEBF0FBECDBF80912B0088232CF0CB\r
+:1000B0008FEF9FEF89839A8305C080912C00992749\r
+:1000C00089839A8389819A8122960FB6F894DEBF3C\r
+:1000D0000FBECDBFDF91CF910895CFEDD0E0DEBF51\r
+:1000E000CDBF80E480932B0088E180932A0087E4D1\r
+:1000F0008093290040E050E06AE470E08AE290E0FA\r
+:1001000008D080E690E09F938F934AD00F900F9095\r
+:10011000FFCF0F931F93CF93DF93082F192FD72F64\r
+:10012000C62F009711F4672BB1F16BE070E081E00E\r
+:1001300090E0D8D2F92FE82F009769F1209771F05D\r
+:10014000C187D28781E0828380917A0090917B0081\r
+:10015000892B21F4F0937B00E0937A0001151105BF\r
+:10016000C1F00783108782E0828380917C009091A8\r
+:100170007D00892B71F4F0937D00E0937C008091E9\r
+:100180007E0090917F00892B21F4F0937F00E09313\r
+:100190007E008E2F9F2FDF91CF911F910F91089599\r
+:1001A000A0E0B0E0E5EDF0E038C4E5E0F0E0EC0F11\r
+:1001B000FD1F819191914E2F5F2F682F792F809194\r
+:1001C0007C0090917D0002D0E2E043C4A2E1B0E067\r
+:1001D000EBEEF0E012C4AA24BB24CC24DD24682E6C\r
+:1001E000792E6D877E874F87588B44245524F92FAD\r
+:1001F000E82F45825682828181FD56C28FEF9FEFA4\r
+:100200006EC240FE3FC2822D80538A3020F5F0E35B\r
+:100210002F1641F42A89222329F4332019F480E08F\r
+:1002200091E093C0EA898E2F9927282F392F220F2A\r
+:10023000331F220F331F220F331F280F391F280FA0\r
+:10024000822F820D80538A8B43FC2EC288230CF4AC\r
+:100250002BC2382E29C243FE05C0FA89FF2311F4B0\r
+:1002600021E02A8B822D992787FD9095883691056C\r
+:1002700054F5853691050CF06BC08835910509F46D\r
+:10028000DDC089359105B4F48B32910509F442C083\r
+:100290008C32910544F48032910509F43FC0839774\r
+:1002A00009F442C0E5C18D329105D9F18E9709F468\r
+:1002B00040C0DEC18336910509F454C084369105EF\r
+:1002C00009F47DC0D5C18037910509F4AFC08137ED\r
+:1002D000910584F48C369105B1F18D3691052CF49D\r
+:1002E0008936910509F46BC0C3C18F36910509F4B5\r
+:1002F0009AC0BEC18537910509F4A2C08637910521\r
+:1003000024F483379105C1F1B3C18837910509F40D\r
+:1003100095C0AEC180E190E0482A592AE0E2F0E0C1\r
+:1003200005C080E890E011C0E0E4F0E04E2A5F2ACA\r
+:10033000BBC188E090E0482A592AEFEFFEEF4E2239\r
+:100340005F221A8AB1C184E090E0482A592AACC1E0\r
+:100350000F2EFFE3AF2EF02D3A940F2EF3E62F2E43\r
+:10036000F02D28C1EF85F8898E2F9F2F02968F8759\r
+:10037000988BA0803A941EC1EF85F8898E2F9F2F0D\r
+:1003800002968F87988BA080B180198AFB2DEA2D69\r
+:100390008081882351F099899F5F998BFB2DEA2DED\r
+:1003A000E90FF11D80818823B1F743FE05C08A89DA\r
+:1003B0009989891708F4898BE9893E1AFBC042FEA6\r
+:1003C0000CC0EF85F8898E2F9F2F04968F87988B0E\r
+:1003D00020813181428153810FC0EF85F8898E2FB2\r
+:1003E0009F2F02968F87988B80819181282F392F9C\r
+:1003F000442737FD4095542FA22EB32EC42ED52E60\r
+:10040000552364F4E2E0F0E04E2A5F2AD094C094D1\r
+:10041000B094A094A11CB11CC11CD11C8FEB9FEF08\r
+:100420004822592230C098E0998B0AC0E0E4F0E0FD\r
+:100430004E2A5F2A0F2EF8E72F2EF02DF0E1F98BD0\r
+:1004400042FE0CC0EF85F8898E2F9F2F04968F8770\r
+:10045000988B20813181428153810DC0EF85F889CD\r
+:100460008E2F9F2F02968F87988B80819181282FC6\r
+:10047000392F44275527A22EB32EC42ED52EEFECAC\r
+:10048000FFEF4E225F228C2E9D2E0894811C911C22\r
+:10049000F989EF2EFF24002711279D2D8C2D7B2D10\r
+:1004A0006A2D512F402F3F2D2E2D80D2B92FA82FEE\r
+:1004B000972F862FF92DE82D80838A301CF0820D2E\r
+:1004C000815204C0F92DE82D8081805DF92DE82D41\r
+:1004D00081938E2E9F2E9D2D8C2D7B2D6A2D512F3D\r
+:1004E000402F3F2D2E2D62D2A22EB32EC42ED52EFC\r
+:1004F000211531054105510581F650FE17C0A32C89\r
+:1005000046FE0BC0832D992787FD9095F989F03120\r
+:1005100011F4825001C08150A82E45FCAA941A14EF\r
+:100520002CF4AA8A88E090E0482A592A43FE1CC08D\r
+:100530009A89993010F0E8E0EA8B8C2F9D2F019674\r
+:10054000A82CA81A8A89F82FF150FA8BA81660F403\r
+:1005500090E3F92DE82D91938E2E9F2E8A89F82F06\r
+:10056000F150FA8BA816A8F341FE02C08DE207C035\r
+:1005700044FE02C08BE203C045FE06C080E2F92DB6\r
+:10058000E82D81938E2E9F2E46FE0EC0F989F03104\r
+:1005900029F4F92DE82D21928E2E9F2E80E3F92D3E\r
+:1005A000E82D81938E2E9F2E8C2F9D2F0196F82D56\r
+:1005B000F81B3F1A842D807869F4832D3A9418161D\r
+:1005C0004CF4772D662D80E290E0A4D0832D3A94F0\r
+:1005D0001816BCF323E6221641F48A2D992787FDCD\r
+:1005E0009095772D662D96D032C083E72816B9F402\r
+:1005F00099899150998B9F3F51F1FB2DEA2D808174\r
+:10060000992787FD90950894A11CB11C772D662D24\r
+:1006100081D0E989E150E98BEF3F79F718C08C2F41\r
+:100620009D2F01968816990691F00C2F1D2F0F5FB4\r
+:100630001F4FF92DE82D82918E2E9F2E992787FD31\r
+:100640009095772D662D66D08016910691F7842DB2\r
+:100650008078A9F0832D3A9418168CF4772D662DA6\r
+:1006600080E290E057D0832D3A941816BCF307C06F\r
+:10067000822D992787FD9095772D662D4BD04424A8\r
+:10068000552412C0F5E22F1641F444245524439416\r
+:100690001A8A3A882AE0298B07C0822D992787FD7C\r
+:1006A0009095772D662D36D0F72DE62D828183FF2C\r
+:1006B0000AC0ED85FE858E2F9F2F01968D879E8720\r
+:1006C000C895202C05C0ED85FE852190ED87FE871D\r
+:1006D000222009F096CDF72DE62D85819681E2E165\r
+:1006E0006296A7C10F931F93CF93DF934DD1082F2D\r
+:1006F000192F3DD0D92FC82F009739F0512F402FF7\r
+:1007000060E070E039D18C2F9D2FDF91CF911F9148\r
+:100710000F9108950F931F93CF93DF93082F192FF5\r
+:10072000D72FC62F8A8182FF0DC02D813E818B81FC\r
+:100730009C812817390764F4E881F9810193E883E3\r
+:10074000F98306C0EF81F885802F0995892B41F444\r
+:100750008D819E8101968D839E83912F802F02C073\r
+:100760008FEF9FEFDF91CF911F910F910895482F49\r
+:10077000592F029710F442E050E020E030E0E09181\r
+:100780007800F09179006E2F7F2FB32FA22F309732\r
+:10079000B9F0808191818417950759F1481759075D\r
+:1007A00040F42115310519F08217930710F4282F12\r
+:1007B000392FAE2FBF2F0280F381E02D309749F7FC\r
+:1007C00021153105E9F1932F822F841B950B049796\r
+:1007D00010F4532F422FF72FE62FA0E0B0E0672B45\r
+:1007E00079F1808191818217930719F54217530798\r
+:1007F00089F4228133818E2F9F2F0296109729F042\r
+:1008000012962D933C93139708953093790020937B\r
+:1008100078000895241B350BAE2FBF2FA20FB31FF6\r
+:100820004D935D9322503040208331838A2F9B2F3C\r
+:100830000895AE2FBF2F0280F381E02D309789F607\r
+:100840008091760090917700892B41F4809171001E\r
+:10085000909172009093770080937600A09173003E\r
+:10086000B0917400109741F4ADB7BEB780916F009E\r
+:1008700090917000A81BB90BE0917600F091770081\r
+:100880008E2F9F2F840F951F02968A179B0748F47F\r
+:100890009093770080937600419351938E2F9F2FF2\r
+:1008A000089580E090E00895CF93DF93009709F4D6\r
+:1008B00060C0B92FA82F129712961D921C92139701\r
+:1008C0008091780090917900009751F1F92FE82FED\r
+:1008D00040E050E0EA17FB0740F1DB2FCA2F1296E9\r
+:1008E000ED93FC9313972D913C911197C20FD31F59\r
+:1008F0008C2F9D2F02968E179F0779F48A819B81FA\r
+:10090000280F391F2E5F3F4F2D933C931197828103\r
+:10091000938112968D939C9313974115510561F421\r
+:10092000B0937900A093780024C04E2F5F2F0280EF\r
+:10093000F381E02D309771F6D52FC42FAA83BB83A6\r
+:10094000952F842F029628813981820F931F8A1751\r
+:100950009B0779F48D919C911197280F391F2E5F79\r
+:100960003F4F2883398312968D919C9113978A83E8\r
+:100970009B83DF91CF910895A82FB92F01C06D936C\r
+:1009800041505040E0F708955527002480FF02C0F1\r
+:10099000060E571F660F771F6115710521F096959A\r
+:1009A0008795009799F7952F802D0895A1E21A2E2B\r
+:1009B000AA1BBB1BEA2FFB2F0DC0AA1FBB1FEE1FDC\r
+:1009C000FF1FA217B307E407F50720F0A21BB30B24\r
+:1009D000E40BF50B661F771F881F991F1A9469F7A0\r
+:1009E0006095709580959095262F372F482F592F19\r
+:1009F0006A2F7B2F8E2F9F2F08952F923F924F9219\r
+:100A00005F926F927F928F929F92AF92BF92CF929E\r
+:100A1000DF92EF92FF920F931F93CF93DF93CDB7A7\r
+:100A2000DEB7CA1BDB0B0FB6F894DEBF0FBECDBF1F\r
+:100A300009942A88398848885F846E847D848C84F0\r
+:100A40009B84AA84B984C884DF80EE80FD800C81F9\r
+:100A50001B81AA81B981CE0FD11D0FB6F894DEBFDC\r
+:0A0A60000FBECDBFCA2FDB2F089593\r
+:100A6A0068656C6C6F2C20776F726C640D0A0020BD\r
+:060A7A00008000000000F6\r
+:00000001FF\r
--- /dev/null
+GAS LISTING C:\cygwin\tmp/cc8iaaaa.s page 1\r
+\r
+\r
+ 1 .file "hello.c"\r
+ 2 .arch at90s4433\r
+ 3 __SREG__ = 0x3f\r
+ 4 __SP_H__ = 0x3e\r
+ 5 __SP_L__ = 0x3d\r
+ 6 __tmp_reg__ = 0\r
+ 7 __zero_reg__ = 1\r
+ 8 .global __do_copy_data\r
+ 9 .global __do_clear_bss\r
+ 10 .stabs "c:\\uzi\\src\\nicktemp/",100,0,0,.Ltext0\r
+ 11 .stabs "hello.c",100,0,0,.Ltext0\r
+ 12 .text\r
+ 13 .Ltext0:\r
+ 14 .stabs "gcc2_compiled.",60,0,0,0\r
+ 15 .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0\r
+ 16 .stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0\r
+ 17 .stabs "long int:t(0,3)=@s32;r(0,3);0020000000000;0017777777777;",128,0,0,0\r
+ 18 .stabs "unsigned int:t(0,4)=r(0,4);0000000000000;0000000177777;",128,0,0,0\r
+ 19 .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0000000000000;0037777777777;",128,0,0,0\r
+ 20 .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,\r
+ 21 .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;",128,0,0,\r
+ 22 .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0\r
+ 23 .stabs "short unsigned int:t(0,9)=r(0,9);0000000000000;0000000177777;",128,0,0,0\r
+ 24 .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0\r
+ 25 .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0\r
+ 26 .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0\r
+ 27 .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0\r
+ 28 .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0\r
+ 29 .stabs "complex int:t(0,15)=s4real:(0,1),0,16;imag:(0,1),16,16;;",128,0,0,0\r
+ 30 .stabs "complex float:t(0,16)=r(0,16);8;0;",128,0,0,0\r
+ 31 .stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0\r
+ 32 .stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0\r
+ 33 .stabs "__builtin_va_list:t(0,19)=*(0,20)=(0,20)",128,0,0,0\r
+ 34 .stabs "_Bool:t(0,21)=@s8;-16;",128,0,0,0\r
+ 35 .stabs "hello.c",130,0,0,0\r
+ 36 .stabs "c:/WinAVR/avr/include/stdio.h",130,0,0,0\r
+ 37 .stabs "c:/WinAVR/avr/include/inttypes.h",130,0,0,0\r
+ 38 .stabs "int8_t:t(3,1)=(0,10)",128,0,46,0\r
+ 39 .stabs "uint8_t:t(3,2)=(0,11)",128,0,47,0\r
+ 40 .stabs "int16_t:t(3,3)=(0,1)",128,0,49,0\r
+ 41 .stabs "uint16_t:t(3,4)=(0,4)",128,0,50,0\r
+ 42 .stabs "int32_t:t(3,5)=(0,3)",128,0,52,0\r
+ 43 .stabs "uint32_t:t(3,6)=(0,5)",128,0,53,0\r
+ 44 .stabs "int64_t:t(3,7)=(0,6)",128,0,55,0\r
+ 45 .stabs "uint64_t:t(3,8)=(0,7)",128,0,56,0\r
+ 46 .stabs "intptr_t:t(3,9)=(3,3)",128,0,58,0\r
+ 47 .stabs "uintptr_t:t(3,10)=(3,4)",128,0,59,0\r
+ 48 .stabn 162,0,0,0\r
+ 49 .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stdarg.h",130,0,0,0\r
+ 50 .stabs "__gnuc_va_list:t(4,1)=(0,19)",128,0,43,0\r
+ 51 .stabs "va_list:t(4,2)=(4,1)",128,0,105,0\r
+ 52 .stabn 162,0,0,0\r
+ 53 .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stddef.h",130,0,0,0\r
+ 54 .stabs "size_t:t(5,1)=(0,4)",128,0,213,0\r
+ 55 .stabn 162,0,0,0\r
+ 56 .stabn 162,0,0,0\r
+ 57 .stabs "c:/WinAVR/avr/include/avr/io.h",130,0,0,0\r
+\fGAS LISTING C:\cygwin\tmp/cc8iaaaa.s page 2\r
+\r
+\r
+ 58 .stabs "c:/WinAVR/avr/include/avr/io4433.h",130,0,0,0\r
+ 59 .stabs "c:/WinAVR/avr/include/avr/sfr_defs.h",130,0,0,0\r
+ 60 .stabn 162,0,0,0\r
+ 61 .stabn 162,0,0,0\r
+ 62 .stabn 162,0,0,0\r
+ 63 .stabs "hello.h",130,0,0,0\r
+ 64 .stabn 162,0,0,0\r
+ 65 .stabs "my_putc:F(0,1)",36,0,8,my_putc\r
+ 66 .stabs "c:p(0,2)",160,0,7,1\r
+ 67 .global my_putc\r
+ 68 .type my_putc, @function\r
+ 69 my_putc:\r
+ 1:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 2:hello.c **** \r
+ 3:hello.c **** #include <stdio.h>\r
+ 4:hello.c **** #include <avr/io.h>\r
+ 5:hello.c **** #include "hello.h"\r
+ 6:hello.c **** \r
+ 7:hello.c **** int my_putc(char c)\r
+ 8:hello.c **** {\r
+ 70 .stabn 68,0,8,.LM1-my_putc\r
+ 71 .LM1:\r
+ 72 /* prologue: frame size=1 */\r
+ 73 0000 CF93 push r28\r
+ 74 0002 DF93 push r29\r
+ 75 0004 CDB7 in r28,__SP_L__\r
+ 76 0006 DEB7 in r29,__SP_H__\r
+ 77 0008 2197 sbiw r28,1\r
+ 78 000a 0FB6 in __tmp_reg__,__SREG__\r
+ 79 000c F894 cli\r
+ 80 000e DEBF out __SP_H__,r29\r
+ 81 0010 0FBE out __SREG__,__tmp_reg__\r
+ 82 0012 CDBF out __SP_L__,r28\r
+ 83 /* prologue end (size=10) */\r
+ 84 0014 8983 std Y+1,r24\r
+ 9:hello.c **** nclude "hello.h"\r
+ 85 .stabn 68,0,9,.LM2-my_putc\r
+ 86 .LM2:\r
+ 87 .L2:\r
+ 88 0016 8091 2B00 lds r24,43\r
+ 89 001a 9927 clr r25\r
+ 90 001c 8072 andi r24,lo8(32)\r
+ 91 001e 9070 andi r25,hi8(32)\r
+ 92 0020 0097 sbiw r24,0\r
+ 93 0022 C9F3 breq .L2\r
+ 10:hello.c **** o.h>\r
+ 11:hello.c **** #include <avr/io.h>\r
+ 94 .stabn 68,0,11,.LM3-my_putc\r
+ 95 .LM3:\r
+ 96 0024 8981 ldd r24,Y+1\r
+ 97 0026 8093 2C00 sts 44,r24\r
+ 12:hello.c **** R */\r
+ 98 .stabn 68,0,12,.LM4-my_putc\r
+ 99 .LM4:\r
+ 100 002a 80E0 ldi r24,lo8(0)\r
+ 101 002c 90E0 ldi r25,hi8(0)\r
+ 13:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+\fGAS LISTING C:\cygwin\tmp/cc8iaaaa.s page 3\r
+\r
+\r
+ 102 .stabn 68,0,13,.LM5-my_putc\r
+ 103 .LM5:\r
+ 104 /* epilogue: frame size=1 */\r
+ 105 002e 2196 adiw r28,1\r
+ 106 0030 0FB6 in __tmp_reg__,__SREG__\r
+ 107 0032 F894 cli\r
+ 108 0034 DEBF out __SP_H__,r29\r
+ 109 0036 0FBE out __SREG__,__tmp_reg__\r
+ 110 0038 CDBF out __SP_L__,r28\r
+ 111 003a DF91 pop r29\r
+ 112 003c CF91 pop r28\r
+ 113 003e 0895 ret\r
+ 114 /* epilogue end (size=9) */\r
+ 115 /* function my_putc size 32 (13) */\r
+ 116 .size my_putc, .-my_putc\r
+ 117 .Lscope0:\r
+ 118 .stabs "",36,0,0,.Lscope0-my_putc\r
+ 119 .stabs "my_getc:F(0,1)",36,0,16,my_getc\r
+ 120 .global my_getc\r
+ 121 .type my_getc, @function\r
+ 122 my_getc:\r
+ 14:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 15:hello.c **** \r
+ 16:hello.c **** #include <stdio.h>\r
+ 123 .stabn 68,0,16,.LM6-my_getc\r
+ 124 .LM6:\r
+ 125 /* prologue: frame size=2 */\r
+ 126 0040 CF93 push r28\r
+ 127 0042 DF93 push r29\r
+ 128 0044 CDB7 in r28,__SP_L__\r
+ 129 0046 DEB7 in r29,__SP_H__\r
+ 130 0048 2297 sbiw r28,2\r
+ 131 004a 0FB6 in __tmp_reg__,__SREG__\r
+ 132 004c F894 cli\r
+ 133 004e DEBF out __SP_H__,r29\r
+ 134 0050 0FBE out __SREG__,__tmp_reg__\r
+ 135 0052 CDBF out __SP_L__,r28\r
+ 136 /* prologue end (size=10) */\r
+ 17:hello.c **** by Nick for Hytech AVR */\r
+ 137 .stabn 68,0,17,.LM7-my_getc\r
+ 138 .LM7:\r
+ 139 0054 8091 2B00 lds r24,43\r
+ 140 0058 8823 tst r24\r
+ 141 005a 2CF0 brlt .L6\r
+ 18:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 142 .stabn 68,0,18,.LM8-my_getc\r
+ 143 .LM8:\r
+ 144 005c 8FEF ldi r24,lo8(-1)\r
+ 145 005e 9FEF ldi r25,hi8(-1)\r
+ 146 0060 8983 std Y+1,r24\r
+ 147 0062 9A83 std Y+2,r25\r
+ 148 0064 05C0 rjmp .L5\r
+ 149 .L6:\r
+ 19:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 150 .stabn 68,0,19,.LM9-my_getc\r
+ 151 .LM9:\r
+ 152 0066 8091 2C00 lds r24,44\r
+\fGAS LISTING C:\cygwin\tmp/cc8iaaaa.s page 4\r
+\r
+\r
+ 153 006a 9927 clr r25\r
+ 154 006c 8983 std Y+1,r24\r
+ 155 006e 9A83 std Y+2,r25\r
+ 20:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 156 .stabn 68,0,20,.LM10-my_getc\r
+ 157 .LM10:\r
+ 158 .L5:\r
+ 159 0070 8981 ldd r24,Y+1\r
+ 160 0072 9A81 ldd r25,Y+2\r
+ 161 /* epilogue: frame size=2 */\r
+ 162 0074 2296 adiw r28,2\r
+ 163 0076 0FB6 in __tmp_reg__,__SREG__\r
+ 164 0078 F894 cli\r
+ 165 007a DEBF out __SP_H__,r29\r
+ 166 007c 0FBE out __SREG__,__tmp_reg__\r
+ 167 007e CDBF out __SP_L__,r28\r
+ 168 0080 DF91 pop r29\r
+ 169 0082 CF91 pop r28\r
+ 170 0084 0895 ret\r
+ 171 /* epilogue end (size=9) */\r
+ 172 /* function my_getc size 35 (16) */\r
+ 173 .size my_getc, .-my_getc\r
+ 174 .Lscope1:\r
+ 175 .stabs "",36,0,0,.Lscope1-my_getc\r
+ 176 .data\r
+ 177 .LC0:\r
+ 178 0000 6865 6C6C .string "hello, world\r\n"\r
+ 178 6F2C 2077 \r
+ 178 6F72 6C64 \r
+ 178 0D0A 00\r
+ 179 .text\r
+ 180 .stabs "main:F(0,1)",36,0,23,main\r
+ 181 .global main\r
+ 182 .type main, @function\r
+ 183 main:\r
+ 21:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 22:hello.c **** \r
+ 23:hello.c **** #include <stdio.h>\r
+ 184 .stabn 68,0,23,.LM11-main\r
+ 185 .LM11:\r
+ 186 /* prologue: frame size=0 */\r
+ 187 0086 C0E0 ldi r28,lo8(__stack - 0)\r
+ 188 0088 D0E0 ldi r29,hi8(__stack - 0)\r
+ 189 008a DEBF out __SP_H__,r29\r
+ 190 008c CDBF out __SP_L__,r28\r
+ 191 /* prologue end (size=4) */\r
+ 24:hello.c **** by Nick for Hytech AVR */\r
+ 25:hello.c **** \r
+ 192 .stabn 68,0,25,.LM12-main\r
+ 193 .LM12:\r
+ 194 008e 80E4 ldi r24,lo8(64)\r
+ 195 0090 8093 2B00 sts 43,r24\r
+ 26:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 196 .stabn 68,0,26,.LM13-main\r
+ 197 .LM13:\r
+ 198 0094 88E1 ldi r24,lo8(24)\r
+ 199 0096 8093 2A00 sts 42,r24\r
+\fGAS LISTING C:\cygwin\tmp/cc8iaaaa.s page 5\r
+\r
+\r
+ 27:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 200 .stabn 68,0,27,.LM14-main\r
+ 201 .LM14:\r
+ 202 009a 87E4 ldi r24,lo8(71)\r
+ 203 009c 8093 2900 sts 41,r24\r
+ 28:hello.c **** /* hello.c by Nick for Hytech AVR */\r
+ 29:hello.c **** \r
+ 30:hello.c **** #include <stdio.h>\r
+ 31:hello.c **** #include <avr/io.h>\r
+ 32:hello.c **** #include "hello.h"\r
+ 33:hello.c **** \r
+ 34:hello.c **** int my_putc(char c)\r
+ 35:hello.c **** {\r
+ 36:hello.c **** while (bit_is_set(UCSRA, UDRE) == 0)\r
+ 37:hello.c **** ;\r
+ 38:hello.c **** UDR = c;\r
+ 39:hello.c **** return 0;\r
+ 204 .stabn 68,0,39,.LM15-main\r
+ 205 .LM15:\r
+ 206 00a0 40E0 ldi r20,lo8(0)\r
+ 207 00a2 50E0 ldi r21,hi8(0)\r
+ 208 00a4 60E0 ldi r22,lo8(pm(my_getc))\r
+ 209 00a6 70E0 ldi r23,hi8(pm(my_getc))\r
+ 210 00a8 80E0 ldi r24,lo8(pm(my_putc))\r
+ 211 00aa 90E0 ldi r25,hi8(pm(my_putc))\r
+ 212 00ac 00D0 rcall fdevopen\r
+ 40:hello.c **** UDRE) == 0)\r
+ 41:hello.c **** ;\r
+ 42:hello.c **** UDR = c;\r
+ 213 .stabn 68,0,42,.LM16-main\r
+ 214 .LM16:\r
+ 215 00ae 80E0 ldi r24,lo8(.LC0)\r
+ 216 00b0 90E0 ldi r25,hi8(.LC0)\r
+ 217 00b2 9F93 push r25\r
+ 218 00b4 8F93 push r24\r
+ 219 00b6 00D0 rcall printf\r
+ 220 00b8 0F90 pop __tmp_reg__\r
+ 221 00ba 0F90 pop __tmp_reg__\r
+ 43:hello.c **** _set(UCSRA, UDRE) == 0)\r
+ 44:hello.c **** ;\r
+ 45:hello.c **** UDR = c;\r
+ 46:hello.c **** return 0;\r
+ 222 .stabn 68,0,46,.LM17-main\r
+ 223 .LM17:\r
+ 224 .L8:\r
+ 225 00bc FFCF rjmp .L8\r
+ 47:hello.c **** UDRE) == 0)\r
+ 48:hello.c **** ;\r
+ 226 .stabn 68,0,48,.LM18-main\r
+ 227 .LM18:\r
+ 228 /* epilogue: frame size=0 */\r
+ 229 /* epilogue: noreturn */\r
+ 230 /* epilogue end (size=0) */\r
+ 231 /* function main size 28 (24) */\r
+ 232 .size main, .-main\r
+ 233 .Lscope2:\r
+ 234 .stabs "",36,0,0,.Lscope2-main\r
+\fGAS LISTING C:\cygwin\tmp/cc8iaaaa.s page 6\r
+\r
+\r
+ 235 .text\r
+ 236 .stabs "",100,0,0,Letext\r
+ 237 Letext:\r
+ 238 /* File "hello.c": code 95 = 0x005f ( 53), prologues 24, epilogues 18 */\r
+\fGAS LISTING C:\cygwin\tmp/cc8iaaaa.s page 7\r
+\r
+\r
+DEFINED SYMBOLS\r
+ *ABS*:00000000 hello.c\r
+ *ABS*:0000003f __SREG__\r
+ *ABS*:0000003e __SP_H__\r
+ *ABS*:0000003d __SP_L__\r
+ *ABS*:00000000 __tmp_reg__\r
+ *ABS*:00000001 __zero_reg__\r
+C:\cygwin\tmp/cc8iaaaa.s:69 .text:00000000 my_putc\r
+C:\cygwin\tmp/cc8iaaaa.s:122 .text:00000040 my_getc\r
+C:\cygwin\tmp/cc8iaaaa.s:183 .text:00000086 main\r
+C:\cygwin\tmp/cc8iaaaa.s:237 .text:000000be Letext\r
+\r
+UNDEFINED SYMBOLS\r
+__do_copy_data\r
+__do_clear_bss\r
+__stack\r
+fdevopen\r
+printf\r
--- /dev/null
+Archive member included because of file (symbol)\r
+\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ hello.o (__do_copy_data)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ hello.o (__do_clear_bss)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o (fdevopen)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ hello.o (printf)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o) (vfprintf)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o) (calloc)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o) (fputc)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o) (malloc)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o) (memset)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_mulhi3.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o) (__mulhi3)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_udivmodsi4.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o) (__udivmodsi4)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_prologue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o) (__prologue_saves__)\r
+c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_epilogue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o) (__epilogue_restores__)\r
+\r
+Allocating common symbols\r
+Common symbol size file\r
+\r
+__iob 0x6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+\r
+Memory Configuration\r
+\r
+Name Origin Length Attributes\r
+text 0x00000000 0x00002000 xr\r
+data 0x00800060 0x0000ffa0 rw !x\r
+eeprom 0x00810000 0x00010000 rw !x\r
+*default* 0x00000000 0xffffffff\r
+\r
+Linker script and memory map\r
+\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+LOAD hello.o\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a\r
+LOAD c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a\r
+\r
+.hash\r
+ *(.hash)\r
+\r
+.dynsym\r
+ *(.dynsym)\r
+\r
+.dynstr\r
+ *(.dynstr)\r
+\r
+.gnu.version\r
+ *(.gnu.version)\r
+\r
+.gnu.version_d\r
+ *(.gnu.version_d)\r
+\r
+.gnu.version_r\r
+ *(.gnu.version_r)\r
+\r
+.rel.init\r
+ *(.rel.init)\r
+\r
+.rela.init\r
+ *(.rela.init)\r
+\r
+.rel.text\r
+ *(.rel.text)\r
+ *(.rel.text.*)\r
+ *(.rel.gnu.linkonce.t*)\r
+\r
+.rela.text\r
+ *(.rela.text)\r
+ *(.rela.text.*)\r
+ *(.rela.gnu.linkonce.t*)\r
+\r
+.rel.fini\r
+ *(.rel.fini)\r
+\r
+.rela.fini\r
+ *(.rela.fini)\r
+\r
+.rel.rodata\r
+ *(.rel.rodata)\r
+ *(.rel.rodata.*)\r
+ *(.rel.gnu.linkonce.r*)\r
+\r
+.rela.rodata\r
+ *(.rela.rodata)\r
+ *(.rela.rodata.*)\r
+ *(.rela.gnu.linkonce.r*)\r
+\r
+.rel.data\r
+ *(.rel.data)\r
+ *(.rel.data.*)\r
+ *(.rel.gnu.linkonce.d*)\r
+\r
+.rela.data\r
+ *(.rela.data)\r
+ *(.rela.data.*)\r
+ *(.rela.gnu.linkonce.d*)\r
+\r
+.rel.ctors\r
+ *(.rel.ctors)\r
+\r
+.rela.ctors\r
+ *(.rela.ctors)\r
+\r
+.rel.dtors\r
+ *(.rel.dtors)\r
+\r
+.rela.dtors\r
+ *(.rela.dtors)\r
+\r
+.rel.got\r
+ *(.rel.got)\r
+\r
+.rela.got\r
+ *(.rela.got)\r
+\r
+.rel.bss\r
+ *(.rel.bss)\r
+\r
+.rela.bss\r
+ *(.rela.bss)\r
+\r
+.rel.plt\r
+ *(.rel.plt)\r
+\r
+.rela.plt\r
+ *(.rela.plt)\r
+\r
+.text 0x00000000 0xa6a\r
+ *(.vectors)\r
+ .vectors 0x00000000 0x1c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x00000000 __vectors\r
+ 0x00000000 __vector_default\r
+ 0x0000001c __ctors_start = .\r
+ *(.ctors)\r
+ 0x0000001c __ctors_end = .\r
+ 0x0000001c __dtors_start = .\r
+ *(.dtors)\r
+ 0x0000001c __dtors_end = .\r
+ *(.progmem.gcc*)\r
+ *(.progmem*)\r
+ 0x0000001c . = ALIGN (0x2)\r
+ *(.init0)\r
+ *(.init1)\r
+ *(.init2)\r
+ .init2 0x0000001c 0xc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ *(.init3)\r
+ *(.init4)\r
+ .init4 0x00000028 0x18 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ 0x00000028 __do_copy_data\r
+ .init4 0x00000040 0x10 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ 0x00000040 __do_clear_bss\r
+ *(.init5)\r
+ *(.init6)\r
+ *(.init7)\r
+ *(.init8)\r
+ *(.init9)\r
+ .init9 0x00000050 0x2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ *(.text)\r
+ .text 0x00000052 0x2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x00000052 __vector_1\r
+ 0x00000052 __vector_12\r
+ 0x00000052 __bad_interrupt\r
+ 0x00000052 __vector_6\r
+ 0x00000052 __vector_3\r
+ 0x00000052 __vector_11\r
+ 0x00000052 __vector_13\r
+ 0x00000052 __vector_7\r
+ 0x00000052 __vector_5\r
+ 0x00000052 __vector_4\r
+ 0x00000052 __vector_9\r
+ 0x00000052 __vector_2\r
+ 0x00000052 __vector_8\r
+ 0x00000052 __vector_10\r
+ .text 0x00000054 0xbe hello.o\r
+ 0x000000da main\r
+ 0x00000094 my_getc\r
+ 0x00000054 my_putc\r
+ .text 0x00000112 0x8e c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ 0x00000112 fdevopen\r
+ .text 0x000001a0 0x2c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ 0x000001a0 printf\r
+ .text 0x000001cc 0x518 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ 0x000001cc vfprintf\r
+ .text 0x000006e4 0x30 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ 0x000006e4 calloc\r
+ .text 0x00000714 0x5a c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ 0x00000714 fputc\r
+ .text 0x0000076e 0x20a c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ 0x0000076e malloc\r
+ 0x000008a8 free\r
+ .text 0x00000978 0x10 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ 0x00000978 memset\r
+ 0x00000988 . = ALIGN (0x2)\r
+ *(.text.*)\r
+ .text.libgcc 0x00000988 0x24 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_mulhi3.o)\r
+ 0x00000988 __mulhi3\r
+ .text.libgcc 0x000009ac 0x4e c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_udivmodsi4.o)\r
+ 0x000009ac __udivmodsi4\r
+ .text.libgcc 0x000009fa 0x38 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_prologue.o)\r
+ 0x000009fa __prologue_saves__\r
+ .text.libgcc 0x00000a32 0x38 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_epilogue.o)\r
+ 0x00000a32 __epilogue_restores__\r
+ 0x00000a6a . = ALIGN (0x2)\r
+ *(.fini9)\r
+ *(.fini8)\r
+ *(.fini7)\r
+ *(.fini6)\r
+ *(.fini5)\r
+ *(.fini4)\r
+ *(.fini3)\r
+ *(.fini2)\r
+ *(.fini1)\r
+ *(.fini0)\r
+ 0x00000a6a _etext = .\r
+\r
+.data 0x00800060 0x16 load address 0x00000a6a\r
+ 0x00800060 PROVIDE (__data_start, .)\r
+ *(.data)\r
+ .data 0x00800060 0xf hello.o\r
+ .data 0x0080006f 0x6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ 0x00800071 __malloc_heap_start\r
+ 0x00800073 __malloc_heap_end\r
+ 0x0080006f __malloc_margin\r
+ *(.gnu.linkonce.d*)\r
+ 0x00800076 . = ALIGN (0x2)\r
+ *fill* 0x00800075 0x1 00\r
+ 0x00800076 _edata = .\r
+ 0x00800076 PROVIDE (__data_end, .)\r
+\r
+.bss 0x00800076 0xa\r
+ 0x00800076 PROVIDE (__bss_start, .)\r
+ *(.bss)\r
+ .bss 0x00800076 0x4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ *(COMMON)\r
+ COMMON 0x0080007a 0x6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ 0x0 (size before relaxing)\r
+ 0x0080007a __iob\r
+ 0x00800080 PROVIDE (__bss_end, .)\r
+ 0x00000a6a __data_load_start = LOADADDR (.data)\r
+ 0x00000a80 __data_load_end = (__data_load_start + SIZEOF (.data))\r
+\r
+.noinit 0x00800080 0x0\r
+ 0x00800080 PROVIDE (__noinit_start, .)\r
+ *(.noinit*)\r
+ 0x00800080 PROVIDE (__noinit_end, .)\r
+ 0x00800080 _end = .\r
+ 0x00800080 PROVIDE (__heap_start, .)\r
+\r
+.eeprom 0x00810000 0x0 load address 0x00000a80\r
+ *(.eeprom*)\r
+ 0x00810000 __eeprom_end = .\r
+\r
+.stab 0x00000000 0x1db8\r
+ *(.stab)\r
+ .stab 0x00000000 0x2a0 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ .stab 0x000002a0 0x3b4 hello.o\r
+ 0x3c0 (size before relaxing)\r
+ .stab 0x00000654 0x3e4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ 0x3f0 (size before relaxing)\r
+ .stab 0x00000a38 0x1d4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ 0x2ac (size before relaxing)\r
+ .stab 0x00000c0c 0x7b0 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ 0x8a0 (size before relaxing)\r
+ .stab 0x000013bc 0x21c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ 0x264 (size before relaxing)\r
+ .stab 0x000015d8 0x204 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ 0x2f4 (size before relaxing)\r
+ .stab 0x000017dc 0x570 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ 0x5d0 (size before relaxing)\r
+ .stab 0x00001d4c 0x6c c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ 0x78 (size before relaxing)\r
+\r
+.stabstr 0x00000000 0x100b\r
+ *(.stabstr)\r
+ .stabstr 0x00000000 0x100b c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ 0x0 (size before relaxing)\r
+\r
+.stab.excl\r
+ *(.stab.excl)\r
+\r
+.stab.exclstr\r
+ *(.stab.exclstr)\r
+\r
+.stab.index\r
+ *(.stab.index)\r
+\r
+.stab.indexstr\r
+ *(.stab.indexstr)\r
+\r
+.comment\r
+ *(.comment)\r
+\r
+.debug\r
+ *(.debug)\r
+\r
+.line\r
+ *(.line)\r
+\r
+.debug_srcinfo\r
+ *(.debug_srcinfo)\r
+\r
+.debug_sfnames\r
+ *(.debug_sfnames)\r
+\r
+.debug_aranges\r
+ *(.debug_aranges)\r
+\r
+.debug_pubnames\r
+ *(.debug_pubnames)\r
+\r
+.debug_info\r
+ *(.debug_info)\r
+ *(.gnu.linkonce.wi.*)\r
+\r
+.debug_abbrev\r
+ *(.debug_abbrev)\r
+\r
+.debug_line\r
+ *(.debug_line)\r
+\r
+.debug_frame\r
+ *(.debug_frame)\r
+\r
+.debug_str\r
+ *(.debug_str)\r
+\r
+.debug_loc\r
+ *(.debug_loc)\r
+\r
+.debug_macinfo\r
+ *(.debug_macinfo)\r
+OUTPUT(hello.elf elf32-avr)\r
+\r
+Cross Reference Table\r
+\r
+Symbol File\r
+__bad_interrupt c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__bss_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+__bss_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+__data_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__data_load_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__data_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+__do_clear_bss c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_clear_bss.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o\r
+__do_copy_data c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_copy_data.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o\r
+__epilogue_restores__ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_epilogue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+__heap_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__heap_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__init c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__iob c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+__malloc_heap_end c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__malloc_heap_start c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__malloc_margin c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+__mulhi3 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_mulhi3.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+__prologue_saves__ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_prologue.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+__stack c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+ hello.o\r
+__udivmodsi4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\libgcc.a(_udivmodsi4.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+__vector_1 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_10 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_11 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_12 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_13 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_2 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_3 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_4 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_5 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_6 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_7 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_8 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_9 c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vector_default c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+__vectors c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+calloc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+fdevopen c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fdevopen.o)\r
+ hello.o\r
+fputc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(fputc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+free c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+main hello.o\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\crts4433.o\r
+malloc c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(malloc.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+memset c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(memset.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(calloc.o)\r
+my_getc hello.o\r
+my_putc hello.o\r
+printf c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
+ hello.o\r
+vfprintf c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(vfprintf_std.o)\r
+ c:\WinAVR\bin\..\lib\gcc-lib\avr\3.3\..\..\..\..\avr\lib\libc.a(printf.o)\r
--- /dev/null
+ .file "hello.c"\r
+ .arch at90s4433\r
+__SREG__ = 0x3f\r
+__SP_H__ = 0x3e\r
+__SP_L__ = 0x3d\r
+__tmp_reg__ = 0\r
+__zero_reg__ = 1\r
+ .global __do_copy_data\r
+ .global __do_clear_bss\r
+ .stabs "c:\\uzi\\src\\nicktemp/",100,0,0,.Ltext0\r
+ .stabs "hello.c",100,0,0,.Ltext0\r
+ .text\r
+.Ltext0:\r
+ .stabs "gcc2_compiled.",60,0,0,0\r
+ .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0\r
+ .stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0\r
+ .stabs "long int:t(0,3)=@s32;r(0,3);0020000000000;0017777777777;",128,0,0,0\r
+ .stabs "unsigned int:t(0,4)=r(0,4);0000000000000;0000000177777;",128,0,0,0\r
+ .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0000000000000;0037777777777;",128,0,0,0\r
+ .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,0\r
+ .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;",128,0,0,0\r
+ .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0\r
+ .stabs "short unsigned int:t(0,9)=r(0,9);0000000000000;0000000177777;",128,0,0,0\r
+ .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0\r
+ .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0\r
+ .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0\r
+ .stabs "complex int:t(0,15)=s4real:(0,1),0,16;imag:(0,1),16,16;;",128,0,0,0\r
+ .stabs "complex float:t(0,16)=r(0,16);8;0;",128,0,0,0\r
+ .stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0\r
+ .stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0\r
+ .stabs "__builtin_va_list:t(0,19)=*(0,20)=(0,20)",128,0,0,0\r
+ .stabs "_Bool:t(0,21)=@s8;-16;",128,0,0,0\r
+ .stabs "hello.c",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/stdio.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/inttypes.h",130,0,0,0\r
+ .stabs "int8_t:t(3,1)=(0,10)",128,0,46,0\r
+ .stabs "uint8_t:t(3,2)=(0,11)",128,0,47,0\r
+ .stabs "int16_t:t(3,3)=(0,1)",128,0,49,0\r
+ .stabs "uint16_t:t(3,4)=(0,4)",128,0,50,0\r
+ .stabs "int32_t:t(3,5)=(0,3)",128,0,52,0\r
+ .stabs "uint32_t:t(3,6)=(0,5)",128,0,53,0\r
+ .stabs "int64_t:t(3,7)=(0,6)",128,0,55,0\r
+ .stabs "uint64_t:t(3,8)=(0,7)",128,0,56,0\r
+ .stabs "intptr_t:t(3,9)=(3,3)",128,0,58,0\r
+ .stabs "uintptr_t:t(3,10)=(3,4)",128,0,59,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stdarg.h",130,0,0,0\r
+ .stabs "__gnuc_va_list:t(4,1)=(0,19)",128,0,43,0\r
+ .stabs "va_list:t(4,2)=(4,1)",128,0,105,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/lib/gcc-lib/avr/3.3/include/stddef.h",130,0,0,0\r
+ .stabs "size_t:t(5,1)=(0,4)",128,0,213,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/io.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/io4433.h",130,0,0,0\r
+ .stabs "c:/WinAVR/avr/include/avr/sfr_defs.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "hello.h",130,0,0,0\r
+ .stabn 162,0,0,0\r
+ .stabs "my_putc:F(0,1)",36,0,8,my_putc\r
+ .stabs "c:p(0,2)",160,0,7,1\r
+.global my_putc\r
+ .type my_putc, @function\r
+my_putc:\r
+ .stabn 68,0,8,.LM1-my_putc\r
+.LM1:\r
+/* prologue: frame size=1 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,1\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ std Y+1,r24\r
+ .stabn 68,0,9,.LM2-my_putc\r
+.LM2:\r
+.L2:\r
+ lds r24,43\r
+ clr r25\r
+ andi r24,lo8(32)\r
+ andi r25,hi8(32)\r
+ sbiw r24,0\r
+ breq .L2\r
+ .stabn 68,0,11,.LM3-my_putc\r
+.LM3:\r
+ ldd r24,Y+1\r
+ sts 44,r24\r
+ .stabn 68,0,12,.LM4-my_putc\r
+.LM4:\r
+ ldi r24,lo8(0)\r
+ ldi r25,hi8(0)\r
+ .stabn 68,0,13,.LM5-my_putc\r
+.LM5:\r
+/* epilogue: frame size=1 */\r
+ adiw r28,1\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function my_putc size 32 (13) */\r
+ .size my_putc, .-my_putc\r
+.Lscope0:\r
+ .stabs "",36,0,0,.Lscope0-my_putc\r
+ .stabs "my_getc:F(0,1)",36,0,16,my_getc\r
+.global my_getc\r
+ .type my_getc, @function\r
+my_getc:\r
+ .stabn 68,0,16,.LM6-my_getc\r
+.LM6:\r
+/* prologue: frame size=2 */\r
+ push r28\r
+ push r29\r
+ in r28,__SP_L__\r
+ in r29,__SP_H__\r
+ sbiw r28,2\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+/* prologue end (size=10) */\r
+ .stabn 68,0,17,.LM7-my_getc\r
+.LM7:\r
+ lds r24,43\r
+ tst r24\r
+ brlt .L6\r
+ .stabn 68,0,18,.LM8-my_getc\r
+.LM8:\r
+ ldi r24,lo8(-1)\r
+ ldi r25,hi8(-1)\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ rjmp .L5\r
+.L6:\r
+ .stabn 68,0,19,.LM9-my_getc\r
+.LM9:\r
+ lds r24,44\r
+ clr r25\r
+ std Y+1,r24\r
+ std Y+2,r25\r
+ .stabn 68,0,20,.LM10-my_getc\r
+.LM10:\r
+.L5:\r
+ ldd r24,Y+1\r
+ ldd r25,Y+2\r
+/* epilogue: frame size=2 */\r
+ adiw r28,2\r
+ in __tmp_reg__,__SREG__\r
+ cli\r
+ out __SP_H__,r29\r
+ out __SREG__,__tmp_reg__\r
+ out __SP_L__,r28\r
+ pop r29\r
+ pop r28\r
+ ret\r
+/* epilogue end (size=9) */\r
+/* function my_getc size 35 (16) */\r
+ .size my_getc, .-my_getc\r
+.Lscope1:\r
+ .stabs "",36,0,0,.Lscope1-my_getc\r
+ .data\r
+.LC0:\r
+ .string "hello, world\r\n"\r
+ .text\r
+ .stabs "main:F(0,1)",36,0,23,main\r
+.global main\r
+ .type main, @function\r
+main:\r
+ .stabn 68,0,23,.LM11-main\r
+.LM11:\r
+/* prologue: frame size=0 */\r
+ ldi r28,lo8(__stack - 0)\r
+ ldi r29,hi8(__stack - 0)\r
+ out __SP_H__,r29\r
+ out __SP_L__,r28\r
+/* prologue end (size=4) */\r
+ .stabn 68,0,25,.LM12-main\r
+.LM12:\r
+ ldi r24,lo8(64)\r
+ sts 43,r24\r
+ .stabn 68,0,26,.LM13-main\r
+.LM13:\r
+ ldi r24,lo8(24)\r
+ sts 42,r24\r
+ .stabn 68,0,27,.LM14-main\r
+.LM14:\r
+ ldi r24,lo8(71)\r
+ sts 41,r24\r
+ .stabn 68,0,39,.LM15-main\r
+.LM15:\r
+ ldi r20,lo8(0)\r
+ ldi r21,hi8(0)\r
+ ldi r22,lo8(pm(my_getc))\r
+ ldi r23,hi8(pm(my_getc))\r
+ ldi r24,lo8(pm(my_putc))\r
+ ldi r25,hi8(pm(my_putc))\r
+ rcall fdevopen\r
+ .stabn 68,0,42,.LM16-main\r
+.LM16:\r
+ ldi r24,lo8(.LC0)\r
+ ldi r25,hi8(.LC0)\r
+ push r25\r
+ push r24\r
+ rcall printf\r
+ pop __tmp_reg__\r
+ pop __tmp_reg__\r
+ .stabn 68,0,46,.LM17-main\r
+.LM17:\r
+.L8:\r
+ rjmp .L8\r
+ .stabn 68,0,48,.LM18-main\r
+.LM18:\r
+/* epilogue: frame size=0 */\r
+/* epilogue: noreturn */\r
+/* epilogue end (size=0) */\r
+/* function main size 28 (24) */\r
+ .size main, .-main\r
+.Lscope2:\r
+ .stabs "",36,0,0,.Lscope2-main\r
+ .text\r
+ .stabs "",100,0,0,Letext\r
+Letext:\r
+/* File "hello.c": code 95 = 0x005f ( 53), prologues 24, epilogues 18 */\r
--- /dev/null
+# Simple Makefile\r
+# Volker Oth (c) 1999\r
+\r
+\r
+########### change this lines according to your project ##################\r
+\r
+#put the name of the target mcu here (at90s8515, at90s8535, attiny22, atmega603 etc.)\r
+ MCU = at90s4433\r
+\r
+#put the name of the target file here (without extension)\r
+ TRG = hello\r
+\r
+#put your C sourcefiles here \r
+# SRC = uart.c $(TRG).c\r
+ SRC = $(TRG).c\r
+\r
+#put additional assembler source file here\r
+ ASRC =\r
+\r
+#additional libraries and object files to link\r
+ LIB = \r
+\r
+#additional includes to compile\r
+ INC = \r
+\r
+#compiler flags\r
+# CPFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+ CPFLAGS = -g -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)\r
+\r
+#linker flags\r
+ LDFLAGS = -Wl,-Map=$(TRG).map,--cref\r
+\r
+########### you should not need to change the following line #############\r
+include avr_make\r
+ \r
+###### dependecies, add any dependencies you need here ###################\r
+\r
+#uart.o : uart.c uart.h\r
+$(TRG).o : $(TRG).c\r
--- /dev/null
+aap1: d2ff d2ff d2ff 92ff d2ff daff d2ff d2ff
+aap2: d2ff d2ff daff d2ff daff daff daff 92ff
--- /dev/null
+\e'\e\e\e'S\e'\14\e'\14\e'\e\e\e'R\e'\14\e'\14\r
--- /dev/null
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
+tter -p /dev/ttyS1 prout
#!/bin/sh
-gcc -g -DPOSIX_TERMIOS testter.c -o testter
+gcc -g -DPOSIX_TERMIOS tter.c -o tter
--- /dev/null
+#!/bin/sh
+gcc -g -DPOSIX_TERMIOS testter.c -o testter
--- /dev/null
+\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\r
--- /dev/null
+\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\e)H\e)e\e)l\e)l\e)o\e) \e)P\e)r\e)i\e)n\e)t\e)e\e)r\e)!\e)\r\r
--- /dev/null
+/* ter.c for uzi180 by Nick */\r
+\r
+#include <stdio.h>\r
+#include <fcntl.h>\r
+#ifdef POSIX_TERMIOS\r
+#include <termios.h>\r
+#else\r
+#include <sgtty.h>\r
+#endif\r
+#include <unistd.h>\r
+\r
+#include <sys/time.h>\r
+#include <sys/select.h>\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* definitions */\r
+\r
+#define BUFFER 0x80\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* prototypes */\r
+\r
+void process_esc(char *buf, int *count);\r
+void exit_error(char *mess1, char *mess2);\r
+void exit_restore(void);\r
+void entry_setup(void);\r
+int main(int argc, char **argv);\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* global variables */\r
+\r
+int fd_in, fd_out, fd_ter, fd_file;\r
+char *pname;\r
+char usage[80];\r
+#ifdef POSIX_TERMIOS\r
+struct termios state_in, state_ter;\r
+#else\r
+int raw_in, raw_ter;\r
+#endif\r
+\r
+/* ------------------------------------------------------------------------- */\r
+\r
+void exit_error(char *mess1, char *mess2)\r
+{\r
+ char header[20];\r
+ exit_restore();\r
+ sprintf(header, "%s: ", pname);\r
+ write(fileno(stderr), header, strlen(header));\r
+ write(fileno(stderr), mess1, strlen(mess1));\r
+ perror(mess2);\r
+ exit(1);\r
+}\r
+\r
+void exit_restore(void)\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ struct termios state;\r
+#else\r
+ struct sgttyb state;\r
+#endif\r
+\r
+ if (fd_in >= 0 && isatty(fd_in))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcsetattr(fd_in, TCSADRAIN, &state_in);\r
+#else\r
+ gtty(fd_in, &state);\r
+ state.sg_flags = raw_in;\r
+ stty(fd_in, &state);\r
+#endif\r
+ }\r
+\r
+ if (fd_ter >= 0 && isatty(fd_ter))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcsetattr(fd_ter, TCSADRAIN, &state_ter);\r
+#else\r
+ gtty(fd_ter, &state);\r
+ state.sg_flags = raw_ter;\r
+ stty(fd_ter, &state);\r
+#endif\r
+ close(fd_ter);\r
+ close(fd_file);\r
+ }\r
+ }\r
+\r
+void entry_setup(void)\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ struct termios state;\r
+#else\r
+ struct sgttyb state;\r
+#endif\r
+\r
+ fd_in = fileno(stdin);\r
+ fd_out = fileno(stdout);\r
+\r
+ if (isatty(fd_in))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcgetattr(fd_in, &state);\r
+ memcpy(&state_in, &state, sizeof(struct termios));\r
+ state.c_iflag &= (IGNBRK | IGNCR | INLCR | ICRNL | IUCLC |\r
+ IXANY | IXON | IXOFF | INPCK | ISTRIP);\r
+ state.c_iflag |= (BRKINT | IGNPAR);\r
+ state.c_oflag &= ~OPOST;\r
+#ifdef CYGWIN\r
+ state.c_lflag &= ~(ECHONL | NOFLSH |\r
+#else\r
+ state.c_lflag &= ~(XCASE | ECHONL | NOFLSH |\r
+#endif\r
+ ICANON | ISIG | ECHO);\r
+ state.c_cflag |= CREAD;\r
+ state.c_cc[VTIME] = 5;\r
+ state.c_cc[VMIN] = 1;\r
+ tcsetattr(fd_in, TCSADRAIN, &state);\r
+ tcsetattr(fd_in, TCSADRAIN, &state);\r
+\r
+#else\r
+ gtty(fd_in, &state);\r
+ raw_in = state.sg_flags;\r
+ state.sg_flags = RAW | UNBUFF;\r
+ stty(fd_in, &state);\r
+#endif\r
+ }\r
+\r
+ if (isatty(fd_ter))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcgetattr(fd_ter, &state);\r
+ memcpy(&state_ter, &state, sizeof(struct termios));\r
+\r
+#if 0\r
+ state.c_iflag &= (IGNBRK | IGNCR | INLCR | ICRNL | IUCLC |\r
+ IXANY | IXON | IXOFF | INPCK | ISTRIP);\r
+ state.c_iflag |= (BRKINT | IGNPAR);\r
+ state.c_oflag &= ~OPOST;\r
+ state.c_lflag &= ~(XCASE | ECHONL | NOFLSH |\r
+ ICANON | ISIG | ECHO);\r
+ state.c_cflag |= CREAD;\r
+ state.c_cc[VTIME] = 5;\r
+ state.c_cc[VMIN] = 1;\r
+\r
+#endif\r
+#ifndef CYGWIN\r
+ cfmakeraw(&state);\r
+ //tcsetattr(fd_ter, TCSADRAIN, &state);\r
+ tcsetattr(fd_ter, TCSANOW, &state);\r
+#endif\r
+#else\r
+ gtty(fd_ter, &state);\r
+ raw_ter = state.sg_flags;\r
+ state.sg_flags = RAW | UNBUFF;\r
+ stty(fd_ter, &state);\r
+#endif\r
+ }\r
+ }\r
+\r
+void process_esc(char *buf, int *count)\r
+ {\r
+ switch (buf[0])\r
+ {\r
+ case 'x':\r
+ case 'X':\r
+ exit_restore();\r
+ fprintf(stderr, "\n%s: exiting\n", pname);\r
+ exit(0);\r
+\r
+ case 0x1b:\r
+ return; /* with count = 1, so as to write it */\r
+\r
+ default:\r
+ *count = 0;\r
+ return;\r
+ }\r
+ }\r
+\r
+int main(int argc, char **argv)\r
+{\r
+ int escflag, count;\r
+ char buf[BUFFER];\r
+\r
+ pname = argv[0];\r
+\r
+ sprintf(usage, "usage: %s -r|-p devicename filename", pname);\r
+\r
+ if (argc < 4)\r
+ {\r
+ printf("%s\n", usage);\r
+ exit(1);\r
+ }\r
+\r
+ fd_in = -1;\r
+ fd_out = -1;\r
+\r
+ fd_ter = open(argv[2], O_RDWR);\r
+ if (fd_ter < 0)\r
+ {\r
+ exit_error("can't open ", argv[1]);\r
+ }\r
+\r
+ entry_setup();\r
+\r
+ escflag = 0;\r
+\r
+ if (!strcmp("-p", argv[1]))\r
+ {\r
+ /*\r
+ * PLAYBACK\r
+ */\r
+ fd_file = open(argv[3], O_RDONLY);\r
+\r
+ if (fd_file < 0)\r
+ {\r
+ exit_error("can't open ", argv[3]);\r
+ }\r
+\r
+ count = read(fd_file, buf, BUFFER);\r
+ if (count < 0)\r
+ {\r
+ exit_error("can't read ", argv[3]);\r
+ }\r
+\r
+ if (count)\r
+ {\r
+ int i;\r
+\r
+ for (i = 0; i < count; i++)\r
+ {\r
+ struct timeval t;\r
+\r
+ t.tv_sec = 0;\r
+ t.tv_usec = 100000; /* 100ms */\r
+\r
+ if (write(fd_ter, &buf[i], 1) != 1)\r
+ {\r
+ exit_error("can't write ", argv[2]);\r
+ }\r
+\r
+ /*\r
+ * A little delay to give the character just\r
+ * written time to be transmitted\r
+ */\r
+ (void)select(0, NULL, NULL, NULL, &t);\r
+ }\r
+ }\r
+\r
+ }\r
+ else if (!strcmp("-r", argv[1]))\r
+ {\r
+ /*\r
+ * RECORD\r
+ */\r
+ fprintf(stderr, "%s: ready\n", pname);\r
+ fflush(stderr);\r
+\r
+ fd_file = open(argv[3], O_WRONLY|O_CREAT);\r
+\r
+ if (fd_file < 0)\r
+ {\r
+ exit_error("can't open ", argv[3]);\r
+ }\r
+\r
+ while (1)\r
+ {\r
+ fd_set readfds;\r
+ int fdmax, fdrdy;\r
+\r
+ FD_ZERO(&readfds);\r
+ FD_SET(fd_in, &readfds);\r
+ FD_SET(fd_ter, &readfds);\r
+\r
+ fdmax = fd_in > fd_ter ? fd_in : fd_ter;\r
+ fdrdy = select(fdmax+1, &readfds, NULL, NULL, NULL);\r
+\r
+ if (fdrdy < 0)\r
+ {\r
+ exit_error("can't select on read ", "select");\r
+ }\r
+\r
+ if (FD_ISSET(fd_in, &readfds))\r
+ {\r
+ exit_restore();\r
+ fprintf(stderr, "%s: exiting\n", pname);\r
+ exit(0);\r
+ }\r
+\r
+ if (FD_ISSET(fd_ter, &readfds))\r
+ {\r
+ count = read(fd_ter, buf, BUFFER);\r
+ if (count < 0)\r
+ {\r
+ exit_error("can't read ", argv[1]);\r
+ }\r
+\r
+ if (count)\r
+ {\r
+ if (write(fd_out, buf, count) != count)\r
+ {\r
+ exit_error("can't write ", "stdout");\r
+ }\r
+\r
+ if (write(fd_file, buf, count) != count)\r
+ {\r
+ exit_error("can't write ", argv[3]);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ exit_restore();\r
+ printf("%s\n", usage);\r
+ exit(1);\r
+ }\r
+\r
+ exit_restore();\r
+ fprintf(stderr, "%s: ready\n", pname);\r
+ close(fd_ter);\r
+ close(fd_file);\r
+ exit(0);\r
+}\r
+\r
+/* ------------------------------------------------------------------------- */\r
--- /dev/null
+\e&\e\e\e&S\e&2\e&2\e&\e\e\e&R\e&2\e&2\r
--- /dev/null
+/*\r
+ * tter.c for uzi180 by Nick & Rob\r
+ *\r
+ * Allows recording and playback of binary data received from/to a serial port\r
+ */\r
+#include <stdio.h>\r
+#include <fcntl.h>\r
+#include <stdlib.h>\r
+\r
+#ifdef POSIX_TERMIOS\r
+#include <termios.h>\r
+#else\r
+#include <sgtty.h>\r
+#endif\r
+\r
+#include <unistd.h>\r
+\r
+#include <sys/time.h>\r
+#include <sys/select.h>\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* definitions */\r
+\r
+#define DEF_BAUDRATE 38400\r
+#define DEF_DELAY 100 /* ms */\r
+\r
+#define USAGE "usage: %s <-r>|<-p [-d <delay ms>]> [-s <baudrate>] <devicename> <filename>"\r
+#define BUFSIZE 0x80\r
+#define P_FLAG 1\r
+#define R_FLAG 2\r
+#define S_FLAG 4\r
+#define D_FLAG 8\r
+\r
+typedef struct\r
+{\r
+ int flags; /* command line options flags */\r
+ int speed; /* terminal baudrate */\r
+ int delay; /* delay between characters during playback */\r
+ char *tname; /* terminal device name */\r
+ char *pname; /* this program's name */\r
+ char *fname; /* filename for recording/playback */\r
+} cmdlineT;\r
+\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* prototypes */\r
+\r
+void process_esc(char *buf, int *count);\r
+void exit_error(char *mess1, char *mess2);\r
+void exit_restore(void);\r
+void entry_setup(void);\r
+int get_baudrate(int speed);\r
+int parse_cmd_line(int argc, char **argv);\r
+int main(int argc, char **argv);\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* global variables */\r
+\r
+int fd_in, fd_out, fd_ter;\r
+FILE *file;\r
+cmdlineT cmdline;\r
+char buf[BUFSIZE];\r
+char usage[80];\r
+\r
+\r
+#ifdef POSIX_TERMIOS\r
+struct termios state_in, state_ter;\r
+#else\r
+int raw_in, raw_ter;\r
+#endif\r
+\r
+/* ------------------------------------------------------------------------- */\r
+\r
+void exit_error(char *mess1, char *mess2)\r
+{\r
+ char header[20];\r
+ exit_restore();\r
+ sprintf(header, "%s: ", cmdline.pname);\r
+ write(fileno(stderr), header, strlen(header));\r
+ write(fileno(stderr), mess1, strlen(mess1));\r
+ perror(mess2);\r
+ exit(1);\r
+}\r
+\r
+void exit_restore(void)\r
+{\r
+#ifdef POSIX_TERMIOS\r
+ struct termios state;\r
+#else\r
+ struct sgttyb state;\r
+#endif\r
+\r
+ if (fd_in >= 0 && isatty(fd_in))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcsetattr(fd_in, TCSADRAIN, &state_in);\r
+#else\r
+ gtty(fd_in, &state);\r
+ state.sg_flags = raw_in;\r
+ stty(fd_in, &state);\r
+#endif\r
+ }\r
+\r
+ if (fd_ter >= 0 && isatty(fd_ter))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcsetattr(fd_ter, TCSADRAIN, &state_ter);\r
+#else\r
+ gtty(fd_ter, &state);\r
+ state.sg_flags = raw_ter;\r
+ stty(fd_ter, &state);\r
+#endif\r
+ }\r
+\r
+ close(fd_ter);\r
+ fclose(file);\r
+}\r
+\r
+void entry_setup(void)\r
+{\r
+#ifdef POSIX_TERMIOS\r
+ struct termios state;\r
+#else\r
+ struct sgttyb state;\r
+#endif\r
+\r
+ fd_in = fileno(stdin);\r
+ fd_out = fileno(stdout);\r
+\r
+ if (isatty(fd_in))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcgetattr(fd_in, &state);\r
+ memcpy(&state_in, &state, sizeof(struct termios));\r
+\r
+ state.c_iflag &= (IGNBRK | IGNCR | INLCR | ICRNL | IUCLC |\r
+ IXANY | IXON | IXOFF | INPCK | ISTRIP);\r
+ state.c_iflag |= (BRKINT | IGNPAR);\r
+ state.c_oflag &= ~OPOST;\r
+\r
+#ifdef XCASE /* Actually non-POSIX */\r
+ state.c_lflag &= ~(XCASE | ECHONL | NOFLSH |\r
+ ICANON | ISIG | ECHO);\r
+#else\r
+ state.c_lflag &= ~(ECHONL | NOFLSH |\r
+ ICANON | ISIG | ECHO);\r
+#endif\r
+\r
+ state.c_cflag |= CREAD;\r
+ state.c_cc[VTIME] = 5;\r
+ state.c_cc[VMIN] = 1;\r
+\r
+ tcsetattr(fd_in, TCSADRAIN, &state);\r
+#else\r
+ gtty(fd_in, &state);\r
+ raw_in = state.sg_flags;\r
+ state.sg_flags = RAW | UNBUFF;\r
+ stty(fd_in, &state);\r
+#endif\r
+ }\r
+\r
+ if (isatty(fd_ter))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ /* Flush any unread & unwritten data */\r
+ tcflush(fd_ter, TCIOFLUSH);\r
+\r
+ tcgetattr(fd_ter, &state);\r
+ memcpy(&state_ter, &state, sizeof(struct termios));\r
+\r
+#if 0\r
+ cfmakeraw(&state); /* Not always supported (e.g. Cygwin) */\r
+#else\r
+ /* Alternative for cfmakeraw() */\r
+ state.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);\r
+ state.c_oflag &= ~OPOST;\r
+ state.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);\r
+ state.c_cflag &= ~(CSIZE|PARENB);\r
+ state.c_cflag |= CS8;\r
+#endif\r
+\r
+ if (!(cmdline.flags & S_FLAG))\r
+ {\r
+ /* Set default baudrate */\r
+ cmdline.speed = DEF_BAUDRATE;\r
+ fprintf(stderr, "%s: baudrate = %d\n", cmdline.pname, cmdline.speed);\r
+ }\r
+\r
+ state.c_ispeed = translate_speed(cmdline.speed);\r
+ state.c_ospeed = translate_speed(cmdline.speed);\r
+\r
+ tcsetattr(fd_ter, TCSANOW, &state);\r
+\r
+#else\r
+ gtty(fd_ter, &state);\r
+ raw_ter = state.sg_flags;\r
+ state.sg_flags = RAW | UNBUFF;\r
+ stty(fd_ter, &state);\r
+#endif\r
+\r
+ }\r
+}\r
+\r
+void process_esc(char *buf, int *count)\r
+{\r
+ switch(buf[0])\r
+ {\r
+ case 'x':\r
+ case 'X':\r
+ exit_restore();\r
+ fprintf(stderr, "\n%s: exiting\n", cmdline.pname);\r
+ exit(0);\r
+\r
+ case 0x1b:\r
+ return; /* with count = 1, so as to write it */\r
+\r
+ default:\r
+ *count = 0;\r
+ return;\r
+ }\r
+}\r
+\r
+int translate_speed(long speed)\r
+{\r
+ int val;\r
+\r
+ switch(speed)\r
+ {\r
+ case 1200:\r
+ val = B1200;\r
+ break;\r
+ case 1800:\r
+ val = B1800;\r
+ break;\r
+ case 2400:\r
+ val = B2400;\r
+ break;\r
+ case 4800:\r
+ val = B4800;\r
+ break;\r
+ case 9600:\r
+ val = B9600;\r
+ break;\r
+ case 19200:\r
+ val = B19200;\r
+ break;\r
+ case 38400:\r
+ val = B38400;\r
+ break;\r
+ case 57600:\r
+ val = B57600;\r
+ break;\r
+ case 115200:\r
+ val = B115200;\r
+ break;\r
+ case 128000:\r
+ val = B128000;\r
+ break;\r
+ default:\r
+ val = translate_speed(DEF_BAUDRATE);\r
+ break;\r
+ }\r
+\r
+ return(val);\r
+}\r
+\r
+int parse_cmd_line(int argc, char **argv)\r
+{\r
+ int c, errflg = 0;\r
+ extern char *optarg;\r
+ extern int optind;\r
+\r
+ cmdline.flags = 0;\r
+ cmdline.speed = 0;\r
+ cmdline.delay = 0;\r
+ cmdline.tname = NULL;\r
+ cmdline.fname = NULL;\r
+\r
+ while ((c = getopt(argc, argv, "rps:d:")) != EOF)\r
+ {\r
+ switch(c)\r
+ {\r
+ /* 'r' and 'p' opts are mutually exclusive */\r
+ case 'r':\r
+ if (cmdline.flags & P_FLAG)\r
+ errflg++;\r
+ else\r
+ cmdline.flags |= R_FLAG;\r
+ break;\r
+ case 'p':\r
+ if (cmdline.flags & R_FLAG)\r
+ errflg++;\r
+ else\r
+ cmdline.flags |= P_FLAG;\r
+ break;\r
+ case 's':\r
+ cmdline.speed = atoi(optarg);\r
+ cmdline.flags |= S_FLAG;\r
+ break;\r
+ case 'd':\r
+ if (cmdline.flags & P_FLAG)\r
+ {\r
+ cmdline.delay = atoi(optarg);\r
+ cmdline.flags |= D_FLAG;\r
+ }\r
+ else\r
+ errflg++;\r
+ break;\r
+ default:\r
+ errflg++;\r
+ }\r
+\r
+ if (errflg) return(-1);\r
+ }\r
+\r
+ if (argc - optind != 2) return(-1);\r
+\r
+ cmdline.tname = argv[optind];\r
+ cmdline.fname = argv[++optind];\r
+\r
+ return 0;\r
+}\r
+\r
+int main(int argc, char **argv)\r
+{\r
+ int escflag, count;\r
+ char *mode;\r
+\r
+ cmdline.pname = argv[0];\r
+ sprintf(usage, USAGE, cmdline.pname);\r
+\r
+ if (parse_cmd_line(argc, argv) < 0)\r
+ {\r
+ (void)fprintf(stderr, "%s\n", usage);\r
+ exit(1);\r
+ }\r
+\r
+ fd_in = -1;\r
+ fd_out = -1;\r
+\r
+ fd_ter = open(cmdline.tname, O_RDWR);\r
+\r
+ if (fd_ter < 0)\r
+ {\r
+ exit_error("can't open ", cmdline.tname);\r
+ }\r
+\r
+ entry_setup();\r
+\r
+ escflag = 0;\r
+\r
+ if (cmdline.flags & P_FLAG)\r
+ {\r
+ /*\r
+ * PLAYBACK\r
+ */\r
+ mode = "rb";\r
+ file = fopen(cmdline.fname, mode);\r
+\r
+ if (file == NULL)\r
+ {\r
+ exit_error("can't open ", cmdline.fname);\r
+ }\r
+\r
+ count = fread(buf, 1, BUFSIZE, file);\r
+\r
+ while (count)\r
+ {\r
+ int i;\r
+\r
+ if (ferror(file) != 0)\r
+ {\r
+ exit_error("can't read ", cmdline.fname);\r
+ }\r
+\r
+ if (feof(file))\r
+ {\r
+ if (buf[count-1] == 0x0a)\r
+ if (buf[count-2] == 0x0d)\r
+ /* DOS: skip 0x0d 0x0a */\r
+ count -= 2;\r
+ else\r
+ /* UNIX: skip 0x0a */\r
+ count -= 1;\r
+ }\r
+\r
+ for (i = 0; i < count; i++)\r
+ {\r
+ struct timeval t;\r
+\r
+ t.tv_sec = 0;\r
+\r
+ if (cmdline.flags & D_FLAG)\r
+ t.tv_usec = cmdline.delay*1000; \r
+ else\r
+ t.tv_usec = DEF_DELAY*1000;\r
+\r
+ if (write(fd_ter, &buf[i], 1) != 1)\r
+ {\r
+ exit_error("can't write ", cmdline.tname);\r
+ }\r
+\r
+#ifdef POSIX_TERMIOS\r
+ /* Wait for output to complete */\r
+ tcdrain(fd_ter);\r
+#endif\r
+\r
+ /* User selected or default delay */\r
+ (void)select(0, NULL, NULL, NULL, &t);\r
+ }\r
+\r
+ count = fread(buf, 1, BUFSIZE, file);\r
+ }\r
+\r
+ fprintf(stderr, "%s: ready\n", cmdline.pname);\r
+ }\r
+ else if (cmdline.flags & R_FLAG)\r
+ {\r
+ /*\r
+ * RECORDING\r
+ */\r
+ fprintf(stderr, "%s: recording; hit any key to stop\n", cmdline.pname);\r
+ fflush(stderr);\r
+\r
+ /*\r
+ * RPB: The umask() doesn't appear to work correctly under\r
+ * Cygwin hence the weird "wb+" mode to specify a file which\r
+ * permits reading & writing. Should also work under Linux and\r
+ * other UNIX versions.\r
+ */\r
+ //umask(0133); /* == 644 file permission */\r
+ mode = "wb+";\r
+ file = fopen(cmdline.fname, mode);\r
+\r
+ if (file == NULL)\r
+ {\r
+ exit_error("can't open ", cmdline.fname);\r
+ }\r
+\r
+ while (1)\r
+ {\r
+ fd_set readfds;\r
+ int fdmax, fdrdy;\r
+\r
+ FD_ZERO(&readfds);\r
+ FD_SET(fd_in, &readfds);\r
+ FD_SET(fd_ter, &readfds);\r
+\r
+ fdmax = fd_in > fd_ter ? fd_in : fd_ter;\r
+ fdrdy = select(fdmax+1, &readfds, NULL, NULL, NULL);\r
+\r
+ if (fdrdy < 0)\r
+ {\r
+ exit_error("can't select on read ", "select");\r
+ }\r
+\r
+ if (FD_ISSET(fd_in, &readfds))\r
+ {\r
+ fprintf(stderr, "\n%s: stopped\n", cmdline.pname);\r
+ break;\r
+ }\r
+\r
+ if (FD_ISSET(fd_ter, &readfds))\r
+ {\r
+ count = read(fd_ter, buf, BUFSIZE);\r
+ if (count < 0)\r
+ {\r
+ exit_error("can't read ", cmdline.tname);\r
+ }\r
+\r
+ if (count)\r
+ {\r
+ if (write(fd_out, buf, count) != count)\r
+ {\r
+ exit_error("can't write ", "stdout");\r
+ }\r
+\r
+ if ((fwrite(buf, 1, count, file) != count) ||\r
+ (ferror(file) != 0))\r
+ {\r
+ exit_error("can't write ", cmdline.fname);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ exit_restore();\r
+ fprintf(stderr, "%s\n", usage);\r
+ exit(1);\r
+ }\r
+\r
+ exit_restore();\r
+ exit(0);\r
+}\r
+\r
+/* ------------------------------------------------------------------------- */\r
--- /dev/null
+/*\r
+ * tter.c for uzi180 by Nick & Rob\r
+ *\r
+ * Allows recording and playback of binary data received from/to a serial port\r
+ */\r
+#include <stdio.h>\r
+#include <fcntl.h>\r
+#include <stdlib.h>\r
+\r
+#ifdef POSIX_TERMIOS\r
+#include <termios.h>\r
+#else\r
+#include <sgtty.h>\r
+#endif\r
+\r
+#include <unistd.h>\r
+\r
+#include <sys/time.h>\r
+#include <sys/select.h>\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* definitions */\r
+\r
+#define DEF_BAUDRATE 38400\r
+#define DEF_DELAY 100 /* ms */\r
+\r
+#define USAGE "usage: %s <-r>|<-p [-d <delay ms>]> [-s <baudrate>] <devicename> <filename>"\r
+#define BUFSIZE 0x80\r
+#define P_FLAG 1\r
+#define R_FLAG 2\r
+#define S_FLAG 4\r
+#define D_FLAG 8\r
+\r
+typedef struct\r
+{\r
+ int flags; /* command line options flags */\r
+ int speed; /* terminal baudrate */\r
+ int delay; /* delay between characters during playback */\r
+ char *tname; /* terminal device name */\r
+ char *pname; /* this program's name */\r
+ char *fname; /* filename for recording/playback */\r
+} cmdlineT;\r
+\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* prototypes */\r
+\r
+void process_esc(char *buf, int *count);\r
+void exit_error(char *mess1, char *mess2);\r
+void exit_restore(void);\r
+void entry_setup(void);\r
+int get_baudrate(int speed);\r
+int parse_cmd_line(int argc, char **argv);\r
+int main(int argc, char **argv);\r
+\r
+/* ------------------------------------------------------------------------- */\r
+/* global variables */\r
+\r
+int fd_in, fd_out, fd_ter;\r
+FILE *file;\r
+cmdlineT cmdline;\r
+char buf[BUFSIZE];\r
+char usage[80];\r
+\r
+\r
+#ifdef POSIX_TERMIOS\r
+struct termios state_in, state_ter;\r
+#else\r
+int raw_in, raw_ter;\r
+#endif\r
+\r
+/* ------------------------------------------------------------------------- */\r
+\r
+void exit_error(char *mess1, char *mess2)\r
+{\r
+ char header[20];\r
+ exit_restore();\r
+ sprintf(header, "%s: ", cmdline.pname);\r
+ write(fileno(stderr), header, strlen(header));\r
+ write(fileno(stderr), mess1, strlen(mess1));\r
+ perror(mess2);\r
+ exit(1);\r
+}\r
+\r
+void exit_restore(void)\r
+{\r
+#ifdef POSIX_TERMIOS\r
+ struct termios state;\r
+#else\r
+ struct sgttyb state;\r
+#endif\r
+\r
+ if (fd_in >= 0 && isatty(fd_in))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcsetattr(fd_in, TCSADRAIN, &state_in);\r
+#else\r
+ gtty(fd_in, &state);\r
+ state.sg_flags = raw_in;\r
+ stty(fd_in, &state);\r
+#endif\r
+ }\r
+\r
+ if (fd_ter >= 0 && isatty(fd_ter))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcsetattr(fd_ter, TCSADRAIN, &state_ter);\r
+#else\r
+ gtty(fd_ter, &state);\r
+ state.sg_flags = raw_ter;\r
+ stty(fd_ter, &state);\r
+#endif\r
+ }\r
+\r
+ close(fd_ter);\r
+ fclose(file);\r
+}\r
+\r
+void entry_setup(void)\r
+{\r
+#ifdef POSIX_TERMIOS\r
+ struct termios state;\r
+#else\r
+ struct sgttyb state;\r
+#endif\r
+\r
+ fd_in = fileno(stdin);\r
+ fd_out = fileno(stdout);\r
+\r
+ if (isatty(fd_in))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ tcgetattr(fd_in, &state);\r
+ memcpy(&state_in, &state, sizeof(struct termios));\r
+\r
+ state.c_iflag &= (IGNBRK | IGNCR | INLCR | ICRNL | IUCLC |\r
+ IXANY | IXON | IXOFF | INPCK | ISTRIP);\r
+ state.c_iflag |= (BRKINT | IGNPAR);\r
+ state.c_oflag &= ~OPOST;\r
+\r
+#ifdef XCASE /* Actually non-POSIX */\r
+ state.c_lflag &= ~(XCASE | ECHONL | NOFLSH |\r
+ ICANON | ISIG | ECHO);\r
+#else\r
+ state.c_lflag &= ~(ECHONL | NOFLSH |\r
+ ICANON | ISIG | ECHO);\r
+#endif\r
+\r
+ state.c_cflag |= CREAD;\r
+ state.c_cc[VTIME] = 5;\r
+ state.c_cc[VMIN] = 1;\r
+\r
+ tcsetattr(fd_in, TCSADRAIN, &state);\r
+#else\r
+ gtty(fd_in, &state);\r
+ raw_in = state.sg_flags;\r
+ state.sg_flags = RAW | UNBUFF;\r
+ stty(fd_in, &state);\r
+#endif\r
+ }\r
+\r
+ if (isatty(fd_ter))\r
+ {\r
+#ifdef POSIX_TERMIOS\r
+ /* Flush any unread & unwritten data */\r
+ tcflush(fd_ter, TCIOFLUSH);\r
+\r
+ tcgetattr(fd_ter, &state);\r
+ memcpy(&state_ter, &state, sizeof(struct termios));\r
+\r
+#if 0\r
+ cfmakeraw(&state); /* Not always supported (e.g. Cygwin) */\r
+#else\r
+ /* Alternative for cfmakeraw() */\r
+ state.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);\r
+ state.c_oflag &= ~OPOST;\r
+ state.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);\r
+ state.c_cflag &= ~(CSIZE|PARENB);\r
+ state.c_cflag |= CS8;\r
+#endif\r
+\r
+ if (!(cmdline.flags & S_FLAG))\r
+ {\r
+ /* Set default baudrate */\r
+ cmdline.speed = DEF_BAUDRATE;\r
+ fprintf(stderr, "%s: baudrate = %d\n", cmdline.pname, cmdline.speed);\r
+ }\r
+\r
+ state.c_ispeed = translate_speed(cmdline.speed);\r
+ state.c_ospeed = translate_speed(cmdline.speed);\r
+\r
+ tcsetattr(fd_ter, TCSANOW, &state);\r
+\r
+#else\r
+ gtty(fd_ter, &state);\r
+ raw_ter = state.sg_flags;\r
+ state.sg_flags = RAW | UNBUFF;\r
+ stty(fd_ter, &state);\r
+#endif\r
+\r
+ }\r
+}\r
+\r
+void process_esc(char *buf, int *count)\r
+{\r
+ switch(buf[0])\r
+ {\r
+ case 'x':\r
+ case 'X':\r
+ exit_restore();\r
+ fprintf(stderr, "\n%s: exiting\n", cmdline.pname);\r
+ exit(0);\r
+\r
+ case 0x1b:\r
+ return; /* with count = 1, so as to write it */\r
+\r
+ default:\r
+ *count = 0;\r
+ return;\r
+ }\r
+}\r
+\r
+int translate_speed(long speed)\r
+{\r
+ int val;\r
+\r
+ switch(speed)\r
+ {\r
+ case 1200:\r
+ val = B1200;\r
+ break;\r
+ case 1800:\r
+ val = B1800;\r
+ break;\r
+ case 2400:\r
+ val = B2400;\r
+ break;\r
+ case 4800:\r
+ val = B4800;\r
+ break;\r
+ case 9600:\r
+ val = B9600;\r
+ break;\r
+ case 19200:\r
+ val = B19200;\r
+ break;\r
+ case 38400:\r
+ val = B38400;\r
+ break;\r
+ case 57600:\r
+ val = B57600;\r
+ break;\r
+ case 115200:\r
+ val = B115200;\r
+ break;\r
+ case 128000:\r
+ val = B128000;\r
+ break;\r
+ default:\r
+ val = translate_speed(DEF_BAUDRATE);\r
+ break;\r
+ }\r
+\r
+ return(val);\r
+}\r
+\r
+int parse_cmd_line(int argc, char **argv)\r
+{\r
+ int c, errflg = 0;\r
+ extern char *optarg;\r
+ extern int optind;\r
+\r
+ cmdline.flags = 0;\r
+ cmdline.speed = 0;\r
+ cmdline.delay = 0;\r
+ cmdline.tname = NULL;\r
+ cmdline.fname = NULL;\r
+\r
+ while ((c = getopt(argc, argv, "rps:d:")) != EOF)\r
+ {\r
+ switch(c)\r
+ {\r
+ /* 'r' and 'p' opts are mutually exclusive */\r
+ case 'r':\r
+ if (cmdline.flags & P_FLAG)\r
+ errflg++;\r
+ else\r
+ cmdline.flags |= R_FLAG;\r
+ break;\r
+ case 'p':\r
+ if (cmdline.flags & R_FLAG)\r
+ errflg++;\r
+ else\r
+ cmdline.flags |= P_FLAG;\r
+ break;\r
+ case 's':\r
+ cmdline.speed = atoi(optarg);\r
+ cmdline.flags |= S_FLAG;\r
+ break;\r
+ case 'd':\r
+ if (cmdline.flags & P_FLAG)\r
+ {\r
+ cmdline.delay = atoi(optarg);\r
+ cmdline.flags |= D_FLAG;\r
+ }\r
+ else\r
+ errflg++;\r
+ break;\r
+ default:\r
+ errflg++;\r
+ }\r
+\r
+ if (errflg) return(-1);\r
+ }\r
+\r
+ if (argc - optind != 2) return(-1);\r
+\r
+ cmdline.tname = argv[optind];\r
+ cmdline.fname = argv[++optind];\r
+\r
+ return 0;\r
+}\r
+\r
+int main(int argc, char **argv)\r
+{\r
+ int escflag, count;\r
+ char *mode;\r
+\r
+ cmdline.pname = argv[0];\r
+ sprintf(usage, USAGE, cmdline.pname);\r
+\r
+ if (parse_cmd_line(argc, argv) < 0)\r
+ {\r
+ (void)fprintf(stderr, "%s\n", usage);\r
+ exit(1);\r
+ }\r
+\r
+ fd_in = -1;\r
+ fd_out = -1;\r
+\r
+ fd_ter = open(cmdline.tname, O_RDWR);\r
+\r
+ if (fd_ter < 0)\r
+ {\r
+ exit_error("can't open ", cmdline.tname);\r
+ }\r
+\r
+ entry_setup();\r
+\r
+ escflag = 0;\r
+\r
+ if (cmdline.flags & P_FLAG)\r
+ {\r
+ /*\r
+ * PLAYBACK\r
+ */\r
+ mode = "rb";\r
+ file = fopen(cmdline.fname, mode);\r
+\r
+ if (file == NULL)\r
+ {\r
+ exit_error("can't open ", cmdline.fname);\r
+ }\r
+\r
+ count = fread(buf, 1, BUFSIZE, file);\r
+\r
+ if (ferror(file) != 0)\r
+ {\r
+ exit_error("can't read ", cmdline.fname);\r
+ }\r
+\r
+ if (count)\r
+ {\r
+ int i;\r
+\r
+ for (i = 0; i < count; i++)\r
+ {\r
+ struct timeval t;\r
+\r
+ t.tv_sec = 0;\r
+\r
+ if (cmdline.flags & D_FLAG)\r
+ t.tv_usec = cmdline.delay*1000; \r
+ else\r
+ t.tv_usec = DEF_DELAY*1000;\r
+\r
+ if (write(fd_ter, &buf[i], 1) != 1)\r
+ {\r
+ exit_error("can't write ", cmdline.tname);\r
+ }\r
+\r
+#ifdef POSIX_TERMIOS\r
+ /* Wait for output to complete */\r
+ tcdrain(fd_ter);\r
+#endif\r
+\r
+ /* User selected or default delay */\r
+ (void)select(0, NULL, NULL, NULL, &t);\r
+ }\r
+\r
+ fprintf(stderr, "%s: ready\n", cmdline.pname);\r
+ }\r
+ }\r
+ else if (cmdline.flags & R_FLAG)\r
+ {\r
+ /*\r
+ * RECORDING\r
+ */\r
+ fprintf(stderr, "%s: recording; hit any key to stop\n", cmdline.pname);\r
+ fflush(stderr);\r
+\r
+ /*\r
+ * RPB: The umask() doesn't appear to work correctly under\r
+ * Cygwin hence the weird "wb+" mode to specify a file which\r
+ * permits reading & writing. Should also work under Linux and\r
+ * other UNIX versions.\r
+ */\r
+ //umask(0133); /* == 644 file permission */\r
+ mode = "wb+";\r
+ file = fopen(cmdline.fname, mode);\r
+\r
+ if (file == NULL)\r
+ {\r
+ exit_error("can't open ", cmdline.fname);\r
+ }\r
+\r
+ while (1)\r
+ {\r
+ fd_set readfds;\r
+ int fdmax, fdrdy;\r
+\r
+ FD_ZERO(&readfds);\r
+ FD_SET(fd_in, &readfds);\r
+ FD_SET(fd_ter, &readfds);\r
+\r
+ fdmax = fd_in > fd_ter ? fd_in : fd_ter;\r
+ fdrdy = select(fdmax+1, &readfds, NULL, NULL, NULL);\r
+\r
+ if (fdrdy < 0)\r
+ {\r
+ exit_error("can't select on read ", "select");\r
+ }\r
+\r
+ if (FD_ISSET(fd_in, &readfds))\r
+ {\r
+ fprintf(stderr, "\n%s: stopped\n", cmdline.pname);\r
+ break;\r
+ }\r
+\r
+ if (FD_ISSET(fd_ter, &readfds))\r
+ {\r
+ count = read(fd_ter, buf, BUFSIZE);\r
+ if (count < 0)\r
+ {\r
+ exit_error("can't read ", cmdline.tname);\r
+ }\r
+\r
+ if (count)\r
+ {\r
+ if (write(fd_out, buf, count) != count)\r
+ {\r
+ exit_error("can't write ", "stdout");\r
+ }\r
+\r
+ if ((fwrite(buf, 1, count, file) != count) ||\r
+ (ferror(file) != 0))\r
+ {\r
+ exit_error("can't write ", cmdline.fname);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ exit_restore();\r
+ fprintf(stderr, "%s\n", usage);\r
+ exit(1);\r
+ }\r
+\r
+ exit_restore();\r
+ exit(0);\r
+}\r
+\r
+/* ------------------------------------------------------------------------- */\r
pkzipc -add=update -path=relative -recurse -excl=junk -excl=dev-* -excl=build -excl=build-b -excl=build-l -excl=*.pdb -excl=*.ilk uzi *\r
-xcopy uzi.zip \\redhat\nick\r
+REM xcopy uzi.zip \\redhat\nick\r
pkzipc -add=update -path=relative -recurse -excl=junk -excl=dev-* -excl=build -excl=build-b -excl=build-l -excl=*.pdb -excl=*.ilk uzipatch *\r
-xcopy uzipatch.zip \\redhat\nick\r
+REM xcopy uzipatch.zip \\redhat\nick\r